支持_POSIX_THREAD_PRIORITY_SCHEDULING的Pthreads系统必须提供至少包括成员sched_priority的struct sched_param结构的 定义。
sched_priority成员是标准pthreads调度的策略(SCHED_FIFO和SCHED_RR)使用的唯一参数。
SCHED_FIFO(先入先出first in first out)策略允许一个线程运行直到有更高优先级的线程准备好,或者直到它自愿阻塞自己。在SCHED_FIFO调度策略下,当有一个线程准备好时,除非有平等或者更高优先级的线程已经在运行,否则它会很快开始执行。
SCHED_RR(轮询)策略是基本相同的,不同之处在于,如果有一个SCHED_RR策略的线程执行了超过一个固定的时期(时间片间隔)没有阻塞,而另外的SCHED_RR或SCHED_FIFO策略的相同优先级的线程准备好了,运行的线程将被抢占以使准备好的线程可以执行。
当有SCHED_FIFO或者SCHED_RR策略的线程在一个条件变量上等待或者等待加锁同一个互斥量时,他们将以优先级顺序被唤醒,即根据两个线程的优先级高低,当互斥量被解锁时,高优先级的总是被先解阻塞。
如果你需要优先级调度,记以下几点:
1,进程竞争范围比系统竞争范围更好,因为你将不会阻止其他进程或内核中的某个线程运行
2.SCHED_RR比SCHED_FIFO更好,并且更具可移植性,因为SCHED_RR线程将在与具有相同优先级的线程共享可用处理器时间间隔中被抢占
3.对SCHED_FIFO和SCHED_RR策略而言,低优先级比高优先级好,因为这更少可能妨碍另外重要的线程执行。
除非你的代码确实需要优先级调度,否则应避免使用它,在大多少情况中,与它将解决的问题相比,优先级调度将引起更多的问题。
阅读(701) | 评论(0) | 转发(0) |