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