无锁编程与LongAdder:高并发计数器的性能优化

一、AtomicLong的性能瓶颈 1.1 高并发下的问题 // 1000个线程,每个线程累加100万次 AtomicLong counter = new AtomicLong(0); ExecutorService executor = Executors.newFixedThreadPool(1000); for (int i = 0; i < 1000; i++) { executor.submit(() -> { for (int j = 0; j < 1_000_000; j++) { counter.incrementAndGet(); // CAS操作 } }); } // 耗时:约 15秒(高并发场景) 性能瓶颈: CAS自旋:高并发时,CAS失败率高,大量自旋消耗CPU 缓存失效:所有线程竞争同一个变量,导致CPU缓存频繁失效(Cache Line伪共享) 串行化:本质上是串行执行,无法充分利用多核CPU 1.2 LongAdder的解决方案 // 同样的场景,使用LongAdder LongAdder counter = new LongAdder(); ExecutorService executor = Executors.newFixedThreadPool(1000); for (int i = 0; i < 1000; i++) { executor.submit(() -> { for (int j = 0; j < 1_000_000; j++) { counter.increment(); // 分段累加 } }); } long result = counter.sum(); // 最终求和 // 耗时:约 2秒(高并发场景) // 性能提升:约 7.5倍! 为什么更快? ...

2025-11-19 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...