POSIX XSH 2.8.4 进程调度定义了线程和进程调度属性的行为。sched_*
指定接口以影响进程的调度属性,而不是线程。这在以下段落中得到了澄清:
POSIX 模型将“进程”视为系统资源的集合,包括可由操作系统在其控制的处理器上调度的一个或多个线程。尽管一个进程有它自己的一组调度属性,但它们对各个线程的调度行为有间接影响(如果有的话),如下所述。
和
对于具有系统调度竞争范围的线程,进程调度属性不应影响线程或专用于该线程的底层内核调度实体的调度属性或行为。
我对此的解读是,在仅支持“系统调度争用范围”的系统上(Linux/glibc 就是这样的系统),这些sched_*
函数应该绝对没有明显的影响。
sched_*
这与在 Linux/glibc 上设置特定线程的调度属性的当前行为的现实相反。
除了想更好地理解这种情况,我想我还有以下关键问题:
是否有任何文件说明这种差异的理由?
我对标准的阅读是否正确?特别是,这对我来说似乎真的很令人惊讶,
sched_setparam
并且sched_setscheduler
会被指定为在单线程应用程序中无效(其中主线程使用默认调度策略,无法更改,并且系统争用范围)。标准功能的用处是什么
sched_*
?在我看来,它们对大多数实现没有影响,即使对支持进程争用范围的实现也影响很小。有人可以描述它们的预期用途吗?