POSIX XSH 2.8.4进程调度定义了线程和进程调度属性的行为。指定sched_*接口是为了影响进程的调度属性,而不是线程。以下段落对此作了澄清:
POSIX模型将“进程”视为系统资源的聚合,包括操作系统在其控制的处理器上调度的一个或多个线程。尽管进程有自己的调度属性集,但这些属性对单个线程的调度行为有间接影响(如果有的话),如下所述。
和
对于具有系统调度争用范围的线程,进程调度属性不应影响该线程或专用于该线程的底层内核调度实体的调度属性或行为。
我对此的解读是,在一个只支持“系统调度争用范围”(Linux/glibc就是这样一个系统)的系统上,sched_*函数应该没有明显的效果。
这与Linux/glibc上当前行为的实际情况相反,其中sched_*设置了特定线程的调度属性。
除了想更好地了解这种情况外,我想我还有以下几个关键问题:
sched_setparam和sched_setscheduler在单线程应用程序(主线程使用不可更改的默认调度策略和系统争用范围)中没有任何影响,这让我感到非常惊讶。sched_*函数有什么用处?在我看来,它们对大多数实现没有影响,甚至对支持流程争用范围的实现也没有任何影响。有人能描述一下它们的用途吗?发布于 2012-11-21 14:10:22
在Linux中,sched_setparam等行为的基本原理是线程实际上是由clone(2)系统调用cf创建的进程。glibc/nptl/sysdeps/pthread/createthread.c。
https://stackoverflow.com/questions/13486889
复制相似问题