我知道什么是“好”以及它如何映射到优先级,这不是问题。
Linux 优先级范围为 0-139。 0-99是实时,100-139是用户空间。尼斯映射到优先级:
- -20 → 100
- 0 → 120
- +19 → 139
我理解好的是用户空间,优先级是内核空间。
但为什么要费心“好”这个概念呢?这似乎是一个多余的措施。在什么情况下,拥有“nice”会比直接影响优先级更好?
它的存在只是为了方便还是有技术原因?
答案1
这不错(2)系统调用正在改变相对的优先级(从原来的前那个系统调用)。但设置优先级(2)正在改变绝对优先事项。
所以我的理解是nice(x)
(x
非常小的数字,例如0到9之间)相当于原子地正在做:
// asssume both getpriority & setpriority syscalls are successful
int n = getpriority(PRIO_PROCESS, 0);
n += x;
setpriority(PRIO_PROCESS, 0, n);
由于多个进程可以在同一个进程上执行类似的操作(例如调用setpriority(PRIO_PROCESS, somepid, n);
...),因此您最好有一个原子将它们结合起来进行运算,即不错(2)
但主要原因是遗产和历史(以及向后兼容性)。 IIRC,在 20 世纪 80 年代的旧 Unix(如 SunOS3.2)有nice
但没有setpriority
(但我可能是错的)。