Linux线程的调度机制
在Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的。Linux这样实现的线程的好处的之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内的线程调度器。
在Linux中,调度器是基于线程的调度策略(scheduling policy)和静态调度优先级(static scheduling priority)来决定那个线程来运行。
Linux系统的三种调度策略:
一、SCHED_OTHER:分时调度策略(Linux线程默认的调度策略)。
二、SCHED_FIFO:实时调度策略,先到先服务。该策略简单的说就是一旦线程占用CPU则一直运行,一直运行直到有更高优先级任务到达或自己放弃。
三、SCHED_RR:实时调度策略,时间片轮转。给每个线程增加了一个时间片限制,当时间片用完后,系统将把该线程置于队列末尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。
调度优先级策略:
实时调度策略大于分时调度策略;
当实时进程/线程准备就绪后,如果当前CPU正在运行分时进程/线程,则实时进程/线程立即抢占分时进程/线程。
同样都是实时调度策略,优先级高的先执行。