当前位置: 首页 > news >正文

Linux 任务调度策略

🌟 概述

Linux 内核以线程(任务)为单位进行调度,支持 SCHED_FIFO 和 SCHED_RR(实时调度)以及 SCHED_OTHER(基于 CFS,非实时调度)。

🔍 调度策略

1. SCHED_FIFO(先进先出)

  • 机制:按优先级和到达顺序运行,无时间片,直到阻塞、被抢占或终止。
  • 特点:优先级 1-99,低延迟,适合硬实时任务。
  • 场景:音频处理、工业控制。

2. SCHED_RR(轮转法)

  • 机制:同优先级线程按时间片轮转,用尽后重新排队。
  • 特点:优先级 1-99,平衡实时性和公平性。
  • 场景:视频流、实时通信。

3. SCHED_OTHER(CFS)

  • 机制:基于 vruntime 公平调度,动态分配 CPU 时间。
  • 特点:nice 值 -20 到 19,适合非实时任务。
  • 场景:Web 服务器、桌面应用。

📊 调度策略对比

特性SCHED_FIFOSCHED_RRSCHED_OTHER (CFS)
类型实时实时非实时
调度单位线程线程线程
调度方式先进先出时间片轮转vruntime 公平分配
时间片固定(10-100ms)动态调整
优先级1-991-99nice 值 -20 到 19
场景硬实时(如音频)软实时(如多媒体)通用任务(如服务器)
权限需 root需 root无需权限
风险低优先级线程可能被饿死时间片切换增加延迟不适合实时任务

🛠️ 主要 API

  • sched_setscheduler(pid, policy, param):设置线程策略和优先级。
  • sched_getscheduler(pid):查询线程策略。
  • sched_setparam(pid, param):设置优先级(SCHED_OTHER 忽略)。
  • sched_yield():让出 CPU。
  • 结构struct sched_param { int sched_priority; };

⚠️ 注意

  • SCHED_FIFO/RR 需 root 权限,优先级高于 SCHED_OTHER。
  • SCHED_OTHER 使用 nice 值调整优先级。
  • SCHED_FIFO 高优先级线程可能导致低优先级线程被饿死。

✅ 优点

  • SCHED_FIFO:低延迟,硬实时。
  • SCHED_RR:实时与公平平衡。
  • SCHED_OTHER:公平,适合通用任务。

🚫 局限性

  • SCHED_FIFO:可能饿死低优先级线程。
  • SCHED_RR:切换开销。
  • SCHED_OTHER:不适合实时。
http://www.dtcms.com/a/243983.html

相关文章:

  • Project Reactor响应式编程简介
  • Leetcode刷题(91~95)
  • 商品中心—3.商品可采可补可售的技术文档上
  • 与AI联手,ModbusTCP 转Ethercat控制系统升级解决刚需新思路
  • MyBatis-Plus 混合使用 XML 和注解
  • 一个教学项目pom.xml杂记
  • DevOps软件开发流程规范
  • 【笔记】NVIDIA AI Workbench 中安装 PyTorch
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试对话标题自动总结
  • 【计算机存储架构】层次化存储架构
  • JAVA-springboot Filter过滤器
  • Amazon Linux 2023 系统上 Radius 部署文档
  • 1Panel 部署 OpenResty + Redis 实现 IP 动态封禁教程
  • gbase8s数据库获取jdbc/odbc协议的几种方式
  • 合同管理登记台账是什么?合同管理登记台账有哪些功能?
  • 基于GA遗传优化的PID控制器最优控制参数整定matlab仿真
  • Matlab解决无法读取路径中的空格
  • 前端实战:用 HTML+JS 打造可拖动图像对比滑块,提升视觉交互体
  • 硬件行业职业规划四篇
  • (功能测试Charles)如何抓取手机http的报文
  • 软件测试之基于博客系统项目的功能测试
  • 解锁Flink CDC:实时数据同步秘籍
  • 速盾:高防CDN可以加速数据库吗?
  • 使用spring-ai-alibaba接入大模型
  • SAP学习笔记 - 开发32 - 前端Fiori开发 Content Density(内容密度)
  • 23、Python字符串核心机制解析:驻留原理、对象比较与成员检测实战
  • 2024睿抗-03
  • Ubuntu 24.04 systemd-journald日志系统 journalctl 查看日志
  • JPA将大数据量的Excel文件导入到数据库中
  • 嵌入式开发学习日志(数据库II 网页制作)Day38