![为什么niceness的范围是-20到19?](https://linux22.com/image/73825/%E4%B8%BA%E4%BB%80%E4%B9%88niceness%E7%9A%84%E8%8C%83%E5%9B%B4%E6%98%AF-20%E5%88%B019%EF%BC%9F.png)
该nice
命令允许您调整程序的调度优先级(“niceness”)。在我使用过的所有类 Unix 系统上,niceness 是由一系列整数指定的,其中 -20 是最有利的调度优先级,0 是默认值,19 是最不利的。
将 0 作为默认友好度足够直观,但为什么选择 -20 和 19 作为范围的端点呢?为什么不是 -128 和 127,它们正好适合有符号的 8 位字节?或者为什么不是 -100 到 100,这对于有小数思维的人类来说更直观,或者类似但更符合人体工程学的 -99 到 99? -20到19的范围是任意选择的,还是与最初接口的调度程序的内部有某种关系nice
? (据我所知,现在不存在这种关系,至少对于 Linux 而言,其调度程序使用 0 到 139 范围内的优先级。但是,我对 -20 到 19 范围的历史原因感兴趣。)
答案1
内部友善程度为 0-39,但是增量是正的还是负的。 来源。所以答案是,命令接受的数字(正数和负数)nice
可以让您从默认级别 20 到 0-39 范围内的任何数字。
那么为什么是0-39呢?具体范围是设计者最初实现的范围。正值越大越好的原因是,在确定优先级时,好级别会添加到进程最近的 CPU 使用情况中。为了提供近似的循环调度,内核会跟踪每个进程最近消耗了多少 CPU,并切换到没有消耗那么多 CPU 的进程。好的级别越高,该进程拥有的 CPU 时间就越多,调度程序就越频繁地将该进程置于睡眠状态或让其保持睡眠状态。看UNIX操作系统的设计莫里斯·J·巴赫 (Maurice J. Bach),Prentice-Hall,1986 年,第 2 节8.1(8.1.4 特别是为了美观)。 ISBN 0-13-201799-7。
答案2
你错了:如果你在 UNIX 上,nice() 接口仍然有意义,NZERO
那么 是默认的 Nice 值,并且NZERO is 20
.
为了让事情变得更明显:您询问了该命令nice
,同时提到了绝对级别,但是nice命令不管理绝对值,而是相对于当前级别进行增量。在默认状态下,nice 级别为NZERO
20。
好的值是 0..2*NZERO-1 或 0..39
请注意,虽然默认的 UNIX 调度程序可能仍然能够以良好的值执行一些有用的操作,但如果您使用专门的调度程序(例如实时调度程序),则没有任何意义。