Linux进程PRI、nice值与调度优先级关系的分析正确性验证
Linux进程PRI、nice值与调度优先级关系的分析正确性验证
嘿,我来帮你理清这里的混淆点,你的分析其实因为对两个“优先级”概念的理解错位出现了偏差,咱们一步步拆解来看:
首先先纠正一个小细节:第二个进程调用setpriority(PRIO_PROCESS, 0, 99),但Linux系统中nice值的有效范围是**-20(最高优先级)到19(最低优先级)**,超出这个范围的数值会被自动截断到边界值,这也是ps输出里它的NI值是19而不是99的原因。
接下来是核心的概念区分,这也是你产生困惑的关键:
- 文档里说的「lower priorities cause more favorable scheduling」,这里的“priority”指的是nice值(也就是
ps里的NI列):nice值越小(比如-20),进程的调度优先级越高,越容易被CPU分配时间;nice值越大(比如19),调度优先级越低,越难获得CPU资源。 - 而
ps输出的PRI列是内核内部实际使用的调度优先级数值,这个数值的含义和nice值是反过来的:PRI数值越小,代表内核判定该进程的调度优先级越低;PRI数值越大,代表调度优先级越高,会被更优先调度。
回到你的实际例子:
- 进程1525010:nice值-20(最小的nice值,调度优先级最高),对应
ps显示的PRI 39(数值大,对应内核里的高调度优先级); - 进程1530075:nice值19(最大的nice值,调度优先级最低),对应
ps显示的PRI 0(数值小,对应内核里的低调度优先级)。
所以你之前的分析把文档里的“priority”(nice值)和ps的PRI列(内核调度优先级)的含义搞反了,这个分析是不正确的,实际情况完全符合文档描述:nice值-20的进程调度优先级更高,会被更优先地调度。
备注:内容来源于stack exchange,提问作者Paul Jurczak




