pthread优先级和pthread策略之间是什么关系?

时间:2019-11-11 19:52:44

标签: multithreading pthreads posix scheduling

我目前正在学习pthread,并且正在努力理解线程优先级和策略之间的关系。到目前为止我所知道的:

线程优先级是指示优先级的整数。此数字越高,操作系统对线程的优先级越高。

线程策略确定如何在具有共享优先级号的进程之间执行线程。 SCHED_RR和SCHED_FIFO是实时策略,除非发出明确的“睡眠”命令,否则它们将连续执行。因此,程序员在使用这些策略时必须非常仔细地编写代码。 SCHED_OTHER是一种循环策略,无法实时执行。

但是,假设我有以下情况(假设每个线程不使用“ sleep”命令)。

Thread 1: priority = 0, policy = SCHED_OTHER
Thread 2: priority = 1, policy = SCHED_OTHER

// would thread 1 run at all? 

Thread 1: priority = 0, policy = SCHED_RR
Thread 2: priority = 1, policy = SCHED_RR

// would thread 1 run at all? 

对于线程策略是否会影响线程优先级,或者线程优先级是否始终胜过策略,我感到困惑。

编辑:找到一个网页,消除了我的大部分困惑:https://computing.llnl.gov/tutorials/pthreads/man/sched_setscheduler.txt

1 个答案:

答案 0 :(得分:1)

SCHED_RR的文档说它与SCHED_FIFO相同,除了在某些情况下两个或多个线程具有相同的静态优先级。

SCHED_FIFO的文档清楚地表明,如果具有较高静态优先级的线程已准备好运行但未运行,并且如果一个或多个具有较低静态优先级的线程正在运行,则较低优先级之一线程将被优先使用优先级更高的线程。

  

在SCHED_RR情况下,线程1是否会全部运行?

这取决于。线程0在做什么?系统有多少个CPU?如果这些是系统中只有一个CPU的仅有两个线程,那么只要线程0不想运行,线程1就可以运行。

通常来说,当您使用静态优先级时,您希望优先级最高的线程完成最少的工作。高优先级的线程应将其大部分时间都花在等待某个事件上。然后,当事件发生时,线程应立即对其进行确认,如果需要某种后续计算,则可能会发出信号通知优先级较低的线程。

  

在SCHED_OTHER情况下,线程1是否会全部运行?

正如我的评论中所提到的,如果您谈论的是静态优先级(即,由sched_setattr()系统调用设置的话),那么这个问题就没有意义了,因为在SCHED_OTHER策略都必须具有相同的静态优先级-零。