四个线程为什么可能比一个线程更慢?这一集从一个共享计数器出发,追踪互斥锁从用户态原子操作、缓存行争抢,到 Linux futex 等待和唤醒的完整路径。
还会区分锁竞争与伪共享,解释上下文切换、调度延迟和缓存变冷怎样放大成本,并给出分片计数、批量合并、缩小临界区等实际优化方法。
重点内容:
- 无竞争加锁为什么通常不进入内核
- futex 如何让竞争线程等待和被唤醒
- 临界区很短为什么仍可能拖慢程序
- 原子加一为什么也存在扩展性上限
- 锁竞争与伪共享有什么区别
- 如何建立多线程性能排查的因果链
英文词对照:
- Mutex:互斥锁
- Atomic Operation:原子操作
- Critical Section:临界区
- Lock Contention:锁竞争
- Futex:快速用户空间互斥机制
- Context Switch:上下文切换
- False Sharing:伪共享
- Cache Line:缓存行
- Spin:自旋
- Thundering Herd:惊群
