Unix 负载均值的历史遗留问题:多 CPU、线程与等待 IO
来源: utcc.utoronto.ca — 2026-09-09
概述
Chris Siebenmann 回顾了 Unix 负载均值在从单 CPU、无线程的 3BSD 时代演化到现代多处理器多线程环境过程中留下的三个问题。第一,多 CPU 上「负载」该表示什么:现代答案是全局的进程计数,两个持续繁忙的进程就是 2,与 CPU 数量无关,而 Irix 等系统当年选过另一种答案,理由是希望这个数字在单核与多核机器上含义一致。第二,线程如何计数,取决于内核能否看见它们——绿色线程对内核不可见,Linux 把线程实现成一种进程因而能被完整计入。第三,是否把等待磁盘 IO 的进程也算进来:3BSD 原始实现算,Linux 早期不算但很快改了。
核心要点
- 现代定义下负载均值是全局进程计数:两个持续繁忙的进程就是 2,与 CPU 数无关。
- 早期有系统选过另一种答案,理由是希望负载数字在单核与多核机器上含义一致。
- 线程是否计入取决于内核可见性:绿色线程不可见,Linux 把线程当作进程因而可见。
- Go 这类把类线程多路复用到内核线程的运行时至今受影响,负载均值无法反映 goroutine 数量。
- 是否把等待磁盘 IO 的进程算进负载各 Unix 选择不同,Linux 早期不算但很快改了。
金句
负载均值是全系统范围内进程的计数;如果有两个进程持续繁忙,无论机器有多少 CPU,你的负载均值都是二。
👍 0
👎 0
返回 Lobsters 首页