为什么会有“好”这个概念呢?

为什么会有“好”这个概念呢?

我知道什么是“好”以及它如何映射到优先级,这不是问题。

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(但我可能是错的)。

相关内容