首页 > 解决方案 > Linux:sched_yield 和 nice 之间的交互

问题描述

nice在 Linux 中,和之间的交互是什么sched_yield?的手册页sched_yield建议调用者将只屈服于具有相同或更高优先级的进程:

如果调用线程是当时最高优先级列表中的唯一线程,则在调用sched_yield().

然而,手册页sched表明它不是黑白分明的:

nice 值影响 SCHED_OTHER 进程的相对调度的程度同样因 UNIX 系统和 Linux 内核版本而异。随着内核 2.6.23 中 CFS 调度程序的出现,Linux 采用了一种算法,该算法会导致 nice 值的相对差异产生更强的效果。在当前的实现中,两个进程的 nice 值的每一个差异单位都会导致调度程序偏爱更高优先级进程的程度为 1.25。当系统上有任何其他更高优先级的负载时,这会导致非常低的 nice 值 (+19) 真正为进程提供很少的 CPU,并使得高的 nice 值 (-20) 将大部分 CPU 提供给需要它的应用程序 (例如,一些音频应用程序)。

有时会sched_yield允许另一个较低优先级的进程运行吗?

PS 我知道 Linus Torvalds 不鼓励使用sched_yield; 这与我理解其行为的目标无关。

标签: linuxlinux-kernelschedulerthread-priority

解决方案


实验表明,与sched_yield手册页相反,它sched_yield确实也会屈服于较低优先级的进程。

手册页需要更新。


推荐阅读