1. AtomicInteger 在高并发计数中的瓶颈
AtomicInteger 在高并发计数时会遇到什么瓶颈?
- CAS 循环的竞争
- 缓存行争用(cache line ping-pong)
- 与其他方案对比
高并发下多个线程同时 getAndIncrement 时,CAS 竞争激烈,大量线程 CAS 失败后重试,形成自旋。更深层的瓶颈是缓存一致性:所有线程争抢同一个缓存行(state 变量所在),每次 CAS 成功失效其他线程的缓存副本,造成 cache line ping-pong 和总线流量上升,吞吐受限。写多读多的热点计数场景下,AtomicInteger 的吞吐会被单点 CAS 竞争限制,这时应改用 LongAdder(分段计数)或 Striped64 机制分散热点。
瓶颈本质是"单点原子变量 + 缓存行竞争"。AtomicInteger 的 CAS 每次都是全局原子操作,并发度高时成为吞吐瓶颈,LongAdder 通过 cell 分段缓解。