Appearance
第 04 课 · CPU 调度:前台怎么排
CPU 工位有限;总管决定谁坐多久。
作者:曹宇春
先记住这个类比
Apple Silicon 常见 8 个核 ≈ 8 个前台工位。
成百上千个部门要办事,不可能每人长期霸占工位。
总管的规矩大致是:每人坐一小会儿(时间片),到点换下一个——切换够快,看起来像「同时」在工作。
正式概念(人话版)
时间片轮转(Round Robin)
每人固定一小段 CPU 时间,公平叫号。
优点:不容易一人霸占;代价:换人要保存/恢复进度(上下文切换),换太勤会浪费。
优先级与「完全公平」
紧急任务可插队(系统绘制界面、音频)。
现代内核常让「欠 CPU 多的人」先补课,既公平又灵活。
I/O 密集 vs CPU 密集
| 类型 | 类比 | 表现 |
|---|---|---|
| CPU 密集 | 一直坐在前台算题 | 占满时间片 |
| I/O 密集 | 总去档案室/等快递 | 主动让出工位,等回来再排 |
所以进程很多时,CPU 仍可能有一半空闲——大家卡在等磁盘和网络。
性能核与能效核(M 系列)
- 性能核:重活——编译、IDE、渲染
- 能效核:杂活——后台同步、通知
总管会把大件派给资深前台,琐事派给实习前台。
在你电脑上看一眼
bash
# 核数、芯片信息(macOS)
sysctl -n hw.ncpu machdep.cpu.brand_string
# 负载:1 / 5 / 15 分钟
uptime
# CPU 占用粗排
ps aux | sort -nrk 3 | head -8经验口诀:
- load << 核数 → 前台不挤
- load ≫ 核数 且持续 → 真的在抢 CPU,或大量进程就绪排队
开发里什么时候用得上
- 编译慢:可能是 CPU 真忙;也可能是磁盘/内存拖后腿——对照第 03 课
- Activity Monitor / top 里 WindowServer 常占一点 CPU:4.5K 屏 + 多窗口的正常开销
- 后台杀毒、索引、同步抢前台时,开发体感会变差
练习
- 记下你机器的
hw.ncpu和当前uptime三个负载数字。 - 开一次大编译或导出,观察 load 和 CPU 占用变化。
小结
- CPU 工位有限,靠时间片 + 优先级轮转
- 多数进程在等 I/O,不占工位
- 先分清「CPU 忙」和「内存/磁盘忙」
下一课:档案室与隔间——文件系统与沙盒。