Liunx 实时调度策略 SCHED_RR SCHED_FIFO 区别 适用情况

2023-10-25 11:52

本文主要是介绍Liunx 实时调度策略 SCHED_RR SCHED_FIFO 区别 适用情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 或 RR
    t1midFIFO 或 RR
    t30OTHER
  • 假设 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。

这篇关于Liunx 实时调度策略 SCHED_RR SCHED_FIFO 区别 适用情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282407

相关文章

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Spring中@RestController和@Controller的使用及区别

《Spring中@RestController和@Controller的使用及区别》:本文主要介绍Spring中@RestController和@Controller的使用及区别,具有很好的参考价... 目录Spring中@RestController和@Controller使用及区别1. 基本定义2. 使

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd