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

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.