**在规模化时,吞吐量受限的更多是争用、缓存效应和无界队列,而非 CPU 数量 —— 线程加过某个点反而会更慢。**Amdahl 定律和通用可扩展性定律(Universal Scalability Law)都预测了这一点:协调成本最终会占主导。
争用
当许多线程争抢一把锁或一条缓存行时,它们会被串行化,把时间花在等待而非工作上。在通用可扩展性定律下,争用加上**一致性成本(coherency cost)**会使吞吐量在越过最优线程数后下降。
缓解手段:对数据分片/分区、每线程状态(thread-local、条带化计数器如 LongAdder)、读写锁,或无锁结构。
伪共享
两个恰好位于同一条 CPU 缓存行上的相互独立的变量,会导致各核心在每次写入时使彼此的缓存失效,尽管它们从不触及相同的数据 —— 一种无声而残酷的减速。
text
缓存行 (64B): [ counterA | counterB ] ← 两个核心来回争抢这条行
修复:做填充,让每个热点变量独占自己的缓存行
