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

Linux 线程调度核心要点

1. 基本单位:任务(Task)

Linux 内核不严格区分线程和进程,它们都被称为​​任务(Task)​​,共享相同的调度策略。线程本质上是共享同一内存地址空间和其他资源(如文件描述符)的任务。

2. 核心调度器:CFS(完全公平调度器)

这是 Linux 默认的调度策略,旨在为所有可运行任务​​公平地分配 CPU 时间​​。

  • ​工作原理​​:CFS 使用一颗​​红黑树​​来组织可运行的任务。树的排序依据是任务的​​虚拟运行时间(vruntime)​​ —— 即任务实际运行时间经过优先级加权后的值。
  • ​调度决策​​:CFS 总是选择 ​​vruntime 最小的任务​​来运行,这代表了它最“缺乏”CPU 时间。这保证了所有任务在较长的时间范围内都能获得公平的 CPU 份额。
  • ​优先级(Nice值)​​:用户可以通过 nice 值(-20 到 19,越小优先级越高)来影响调度的“公平”权重。高优先级(低 nice 值)的任务的 vruntime 增长得更慢,从而能获得更多的实际运行时间。

3. 调度策略(Schedule Policies)

CFS 主要管理普通任务,Linux 还提供了其他策略:

  • SCHED_OTHER / SCHED_NORMAL: 默认策略,即 CFS,用于普通任务。
  • SCHED_FIFO / SCHED_RR: ​​实时策略​​,优先级高于所有普通任务。
    • ​FIFO​​ (先进先出):高优先级任务会一直运行,直到它主动放弃、休眠或被更高优先级的任务抢占。
    • ​RR​​ (时间片轮转):与 FIFO 类似,但同级优先级的任务会共享 CPU,每个任务运行一个时间片后轮到下一个。
  • SCHED_BATCH / SCHED_IDLE: 用于低优先级后台任务,对交互响应要求低。

4. 多核负载均衡

在多核(SMP)系统中,调度器还需要将任务合理地分配到各个 CPU 核心上,以充分利用所有核心并减少缓存失效。这个过程由​​负载均衡器​​完成,它会定期在各个 CPU 之间迁移任务以平衡负载。


​总结一下​​:Linux 线程调度的核心是 ​​CFS​​,它通过​​虚拟运行时间(vruntime)​​ 和​​红黑树​​来实现公平性,同时支持​​实时优先级​​和​​多核负载均衡​​以满足不同场景的需求。

http://www.xdnf.cn/news/1395667.html

相关文章:

  • Shell 脚本基础教程
  • java序列化
  • Android系统框架知识系列(十九):Android安全架构深度剖析 - 从内核到应用的全栈防护
  • python学习打卡day48
  • “白月光”焦点何晟铭现身宁夏中宁,助力非遗与三农发展
  • 拎包入住搭建 Browser Use Agent:基于PPIO Model API +Agent 沙箱的一体化构建
  • 变量声明方式
  • linux学习-数据库
  • 中科米堆CASAIM五金配件三维扫描测量尺寸形位公差
  • 嵌入式Linux驱动开发:i.MX6ULL平台设备驱动
  • 使用 Docker 部署 Squid 为 Kubernetes 中的 Nexus3 提供公网代理访问
  • linux 条件变量与生产消费者模型
  • 玳瑁的嵌入式日记D29-0829(进程间通信)
  • Python OpenCV图像处理与深度学习:Python OpenCV开发环境搭建与入门
  • 基于能量方法的纳维-斯托克斯方程高阶范数有界性理论推导-陈墨仙
  • STM32CubeMX + HAL 库:基于 I²C 通信的 AHT20 高精度温湿度测量实验
  • 【系列03】端侧AI:构建与部署高效的本地化AI模型 第2章:端侧AI硬件入门
  • 134-细粒度多尺度符号熵和鲸鱼优化算法的滚动轴承故障诊断技术MSVM
  • Redis搭建哨兵模式一主两从三哨兵
  • 线程安全及死锁问题
  • 【好题推荐】运算符的构造运用
  • 光伏发多少电才够用?匹配家庭用电需求
  • #医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(五)
  • Linux内核进程管理子系统有什么第三十八回 —— 进程主结构详解(34)
  • JUC并发编程09 - 内存(01) - JMM/cache
  • 嵌入式Linux设备树驱动开发 - dtsof驱动
  • Unity DateTime 相关
  • 处理器(CPU/MPU)的双发射是什么?
  • 命令扩展与重定向
  • 可解释人工智能XAI