欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

linux的两种调度策略的优缺点,linux调度三种策略

墨初 知识笔记 62阅读
SCHED_RR SCHED_FIFO 适用情况 SCHED_FIFO 先进先出调度。只能在静态优先级高于0的情况下使用这意味着当 SCHED_FIFO 线程变得可运行时它总是立即抢占当前正在运行的任何 SCHED_OTHER、SCHED_BATCH 或 SCHED_IDLE 线程。SCHED_FIFO 线程一直运行到被 I/O 请求阻塞、被高优先级线程抢占或调用 sched_yield 为止。SCHED_FIFO 是一种简单的调度算法没有时间切片。对于 SCHED_FIFO 策略下调度的线程应用以下规则: 被另一个高优先级线程抢占的正在运行的 SCHED_FIFO 线程将保持在其优先级列表的头部并在所有高优先级线程再次阻塞时立即恢复执行。当阻塞的 SCHED_FIFO 线程变为可运行时它将被插入到优先级列表的末尾。 SCHED_RR 循环调度。SCHED_RR 是 SCHED_FIFO 的简单增强。上面为 SCHED_FIFO 描述的所有内容也适用于 SCHED_RR除了每个线程只允许在最大时间片内运行。如果 SCHED_RR 线程已经运行了等于或大于该时间片的时间段那么它将被放在优先级列表的末尾。被高优先级线程抢占并随后作为运行线程恢复执行的 SCHED_RR 线程将完成其循环时间量的未过期部分。 分析

假设在 cpu0 上存在以下3个线程

线程名优先级调度策略t0highFIFO 或 RRt1midFIFO 或 RRt30OTHER

假设 t0 和 t1 使用 FIFO 策略则只要 t0 线程就绪就会立刻抢占 t1 和 t3直到 t0 主动放弃 cpu 为止t1 或者 t3 才会被运行。

假设 t0 和 t1 使用 RR 策略与 FIFO 的区别就是t0 线程在使用完时间片以后会发生一次调度 此时 t0 仍然是 cpu0 上优先级最高的线程其会再次获得运行。也就是说只要 t0 不主动放弃 cpu其会一直运行。和 FIFO 一致但是多了额外的开销。

假设 t0 和 t1 优先级一致在使用 FIFO 策略的情况下如果 t0 先运行那么 t1 只有等到 t0 主动放弃 cpu才会得到运行。在使用 RR 策略的情况下如果 t0 先运行t1 在 t0 时间片消耗完之后便可得到运行。

SCHED_FIFO 适用情况 在设置 cpu 亲和性的情况下如果在同一个核心上只存在一个同优先级线程则应使用 SCHED_FIFO。在不设置 cpu 亲和性的情况下如果同优先级线程数小于或等于 cpu 总核心数则应使用 SCHED_FIFO。 SCHED_RR 适用情况 在设置 cpu 亲和性的情况下如果在同一个核心上需要绑定一个以上的同优先级线程则应使用 SCHED_RR。在不设置 cpu 亲和性的情况下如果同优先级线程数超过 cpu 总核心数则应使用 SCHED_RR。

标签:
声明:无特别说明,转载请标明本文来源!