Skip to content

第 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 屏 + 多窗口的正常开销
  • 后台杀毒、索引、同步抢前台时,开发体感会变差

练习

  1. 记下你机器的 hw.ncpu 和当前 uptime 三个负载数字。
  2. 开一次大编译或导出,观察 load 和 CPU 占用变化。

小结

  • CPU 工位有限,靠时间片 + 优先级轮转
  • 多数进程在等 I/O,不占工位
  • 先分清「CPU 忙」和「内存/磁盘忙」

下一课:档案室与隔间——文件系统与沙盒。

© 曹宇春 · 个人学习整理,欢迎交流