我正在编写一个程序启动器,它使用nice来启动比平常更高的优先级的X应用程序,虽然有很多使用nice/renice的指南,但关于设置程序优先级的最佳实践却没有太多讨论。我发现一个网站说超过 -10 可能会适得其反,因为“重要的子进程”的优先级将低于依赖它们的程序,而另一个网站则说 -20 是一个坏主意,但其他一切都可以。所以我的问题是,对于运行文字处理器/浏览器/游戏/无论什么的单用户桌面,是否存在收益递减点,或者是否有任何原因我不想为用户启动的任何程序默认为 -19?目前,我预计它将在 Linux 内核上运行,但也对在 BSD 等其他 unice 上是否存在任何潜在问题感兴趣。
答案1
Linux 中的调度程序有以下策略:
SCHED_NORMAL
几乎所有任务都会用到它。这些任务的优先级越高,它们获得的调度时间就越多。SCHED_BATCH
低于SCHED_NORMAL
优先级。SCHED_IDLE
19
甚至比 的优先级还要低SCHED_NORMAL
。SCHED_FIFO
/SCHED_RR
几乎是实时的,并且在系统上具有最高优先级。基本上它们没有时间片并且可以运行直到终止。
这方面的文档在这里:https://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt
要了解这些优先事项的进展情况,您需要了解调度程序做什么:
在计算中,调度是将通过某种方式指定的工作分配给完成该工作的资源的方法。
进一步来说,慢性疲劳综合症是您所指的调度程序。
因此,将进程设置为较高优先级意味着调度程序将比优先级较低的进程更优先选择该进程。
答案2
nice
在单用户桌面上,假设您正在谈论友好性和命令而不是实时调度,则更改主应用程序进程优先级不会有真正的缺点/风险。
但由于以下两个原因,也不会有真正的激励:
进程优先级与 CPU 使用率有关,但现在 CPU 很少成为瓶颈,CPU 速度很快,并且通常是多核和多线程,因此通常有足够的能力来同时运行愿意使用 CPU 的进程(如果有)。
桌面应用程序通常是交互式的,因此通常会花费大量时间等待用户输入、网络 I/O 或磁盘 I/O,因此更改其优先级不会产生太大影响,因为在这些空闲期之后,其实际优先级将提高。
在某些情况下,如果您启动 CPU 密集型批处理作业,降低其优先级或提高其他进程优先级可能会产生明显的影响,这会产生影响。