You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动