线程调度策略SCHED_RR(轮转法)和SCHED_FIFO(先进先出)之对照

时间:2021-01-23 02:12:30

我们在用pthread创建线程时,能够指定调度策略policy——SCHED_OTHER(默认)、SCHED_RR和SCHED_FIFO。这里TALK一下两个实时策略——SCHED_RR和SCHED_FIFO。

先看一下效果。我们创建了四个子线程,指定最高优先级(针对特定策略):

  • SCHED_RR
线程调度策略SCHED_RR(轮转法)和SCHED_FIFO(先进先出)之对照

  • SCHED_FIFO
线程调度策略SCHED_RR(轮转法)和SCHED_FIFO(先进先出)之对照

对同样优先级的任务。SCHED_RR是分配给每一个任务一个特定的时间片,然后轮转依次运行。而SCHED_FIFO则是让一个任务运行完再调度下一个任务,而顺序就是依照创建的先后。

SCHED_RR是依据时间片来调度线程的,当时间片用完时,无论这个线程优先级有多高,都不会在执行,而是进入就绪队列,等待下一个时间片到来。只是图1显示,在thread5798时间片用完时,该线程紧接着进行了一次抢占preemption。又获得了一个时间片。顺便提一句时间片长度的定位是linux凭经验来的。即选择尽可能长、同一时候能保持良好对应时间的一个时间片。