【Linux】进程调度器

下面我给你一个 清晰、准确、面向最新 Linux 内核(5.x~6.x)的解释

你的三个问题分别是:

  1. 最新的 Linux 内核是否仍然用 CFS 调度普通进程?
  2. 是不是一个进程指定一种调度器?
  3. CFS 与实时调度器(RT scheduler)的关系是什么?

我逐条解释。


1. 最新 Linux 内核是否仍然使用 CFS?

是的。

在 Linux 6.x 内核中(包括最新的 6.10 LTS),Linux 仍然采用:

  • **CFS(Completely Fair Scheduler)**作为 普通任务(normal tasks) 的主调度器
    对应调度策略:SCHED_NORMAL(SCHED_OTHER)SCHED_BATCH

CFS 仍然是桌面 Linux、服务器 Linux 中绝大多数进程使用的调度器。

✔ CFS = 默认调度器,一直在维护和优化


2. 一个进程是否"指定"一种调度器?

不是直接指定调度器,而是指定调度策略(policy)。

调度策略由内核映射到具体调度器。

用户态只能设置:

  • SCHED_OTHER / SCHED_NORMAL
  • SCHED_BATCH
  • SCHED_IDLE
  • SCHED_FIFO
  • SCHED_RR
  • (新)SCHED_DEADLINE

policy → 内核选定对应的调度器

调度策略(policy) 使用的调度器 说明
SCHED_NORMAL(SCHED_OTHER) CFS 默认普通进程
SCHED_BATCH CFS 批处理,权重较低
SCHED_IDLE CFS idle 调度类 极低优先级
SCHED_FIFO RT 调度器 实时
SCHED_RR RT 调度器 实时(轮转)
SCHED_DEADLINE Deadline 调度器 最强实时、按调度参数保证

🔹 所以,进程并不直接选择 CFS 或 RT 调度器。

🔹 它选择 policy,policy 决定属于哪个调度器类(sched_class)。


3. CFS 与实时调度器(RT scheduler)的关系是什么?

Linux 调度器内部不是一个调度器,而是一个 调度器类链表(scheduler class)

复制代码
stop_sched_class
deadline_sched_class
rt_sched_class
fair_sched_class   <-- CFS
idle_sched_class

调度决策遵循以下优先级:

stop > deadline > rt > fair(CFS) > idle

所以关系是:

  • 最高优先级:实时/硬实时(SCHED_DEADLINE / SCHED_FIFO / SCHED_RR)
  • 其次才是:普通任务(CFS)
  • 最后是:空闲级别(SCHED_IDLE)

简化理解:

复制代码
优先运行 RT > CFS

RT 任务一定会抢占 CFS 任务

CFS 任务永远不阻塞 RT 任务

Deadline 调度比 RT 更强,是硬实时


🔥 最简单的总结(必记)

1. 最新 Linux 内核仍然使用 CFS 作为主要 CPU 调度器

2. 进程不是直接选调度器,而是选调度策略(policy)

3. Linux 有多种调度器并存,按优先级排:

复制代码
Deadline > RT(FIFO/RR) > CFS > Idle

如果你需要,我还能继续解释:

  • 如何在 Linux 中把进程切换成 RT 任务(例子:chrt)
  • CFS 的 vruntime 是怎么确保公平的
  • RT 调度器如何避免任务饿死
  • Deadline 调度器的参数 runtime/period/deadline

你接下来想深入哪个?

相关推荐
渡我白衣11 分钟前
深入理解 Transformer:Transformer 究竟是什么?
java·linux·开发语言·c++·人工智能·深度学习·transformer
挨踢诗人1 小时前
金蝶K3 WISE × 乐企平台 直连数电票集成解决方案(商贸企业开票自动化)
大数据·运维·自动化
光电的一只菜鸡7 小时前
ubuntu之坑(二十)——VMware虚拟机系统无法正常进入如何处理
linux·运维·ubuntu
青 春 记 忆7 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
Java王小怪9 小时前
Docker环境Redis没挂载保存数据
运维·docker·容器
你住过的屋檐9 小时前
【Nginx】linux上安装nginx
linux·运维·nginx
宵时待雨9 小时前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
大模型码小白10 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
晓晓_za89866811 小时前
开源 GEO 优化源码二次开发:贴牌改造与业务模块扩展实践
java·运维·服务器·开发语言·性能优化·开源
SCandL15211 小时前
k8s service
linux·容器·kubernetes