Linux 的进程调度(Process Scheduling)负责决定哪个进程在哪个 CPU 上运行、运行多久。下面从整体到细节讲清楚它是怎么工作的。
Linux 中进程常见状态:
只有 R 状态的进程会被调度。
| 版本 | 调度器 |
|---|---|
| 2.4 | O(n) 调度器 |
| 2.6 早期 | O(1) 调度器 |
| 2.6.23+ | CFS(Completely Fair Scheduler) |
| 实时 | RT / Deadline 调度类 |
Linux 使用调度类分层:
stop > deadline > rt > fair(CFS) > idle
每个 CPU 有独立运行队列(rq)。
让每个进程“公平”地使用 CPU 时间
不是时间片固定,而是:
vruntimevruntime 小,谁先跑vruntimevruntimevruntime 最小的进程nice 值:-20 ~ 19CFS 没有固定时间片,而是:
例如:
schedule()need_resched 标志rq# 查看进程调度策略
chrt -p <pid>
# 设置实时优先级
chrt -f 50 <cmd>
# 调整 nice
nice -n -5 ./app
Linux 进程调度通过 CFS + 调度类 + 红黑树 + 抢占机制,在公平、延迟和实时性之间动态平衡。
如果你愿意,我也可以:
你想深入哪一块?