进程的优先级介绍
每一个进程都有各自的优先级,那么优先级有什么用呢?
之前我们在讲PCB(进程控制模块)和进程的状态中的R状态我们可以知道,cpu在运行众多进程需要拥有一个运行队列(run_queue)来完成所有进程的“同时进行”,而这个“同时进行”也只是相对于我们的肉眼来讲,而实际上,如果你的cpu只有一个,那么这些进程是不会真正意义上同时进行的,而是通过每个进程运行以微秒为时间单位来运行队列中的所有进程。
至于每个进程运行时间的多少,是经过OS调度模块来决定的,它决定着每个进程能分配到多少cpu的资源,而进程的优先级,影响着OS调度模块对进程的权重。
如何查看一个进程的优先级?
通过 ps -al 指令可以查看进程的优先级
-a 显示所有终端机下执行的程序,除了阶段作业领导者之外
-l 采用详细的格式来显示程序状况
PRI(priority)默认值为80(一个进程的优先级)PRI值越小越快被执行
NI (nice值):影响PRI的值(取值范围为-20 - 19)
进程的默认PRI值是80,如果我们要修改一个进程的优先级,不是通过直接改变进程的PRI值,而是用过NI值。
通过top 指令改变进程的NI值
输入top指令后,输入r,再输入进程的PID,再输入你想更改的NI值,最后输入q退出
这里我们将nice值设置为10,然后再看看进程的优先级变化
PRI值变为了90,NI值变为了10.
那么我们再讲NI值设置一次为15,PRI值会变成多少呢?
这里我们可以看到 PRI值变为了95,NI值变为了15.
所以这就说明 PRI(new) = PRI(old)+ NI
那我们再来试一试如果nice设置为-100会怎么样?
注意:我这里是用的sudo top (用了超级管理员身份)才能修改这么大的nice值
但是我们这里又能看到 NI值为-20,这就验证了我们上面的说法,NI值的取值范围为(-20 - 19)
实际上,我们一般不会去修改一个进程的优先级,操作系统默认的就挺好的了,为什么呢?
1. 即便你设置了nice值,其实差别并不大,所以设置了也没啥用。
2. 操作系统拥有强大的算法,不要小看了操作系统,操作系统所作出的操作已经很优了。