IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:AtomicLong

共 1 篇相关文章

IT 累计浏览 2,348

从LongAdder看更高效的无锁实现

这篇讲的是作者从阅读Guava源码时接触到AtomicLong出发,为何要深入研究Doug Lea设计的LongAdder。文章的核心在于解析LongAdder如何实现比AtomicLong更高并发性能的无锁计数。 我们知道,AtomicLong的高效依赖CAS操作,但在高并发下,大量线程竞争同一个value变量会导致频繁的CAS失败与重试,形成恶性循环。LongAdder的核心实现思路正是解决这个问题:它采用“分段更新”的策略,将单一value的压力分散到一个Cell数组中。 具体来说,当CAS更新base值失败时,LongAdder会根据线程信息将更新操作分散到cells数组的某个Cell单元上。每个线程尽可能只更新自己命中的那个Cell的value值,从而极大降低了高并发下的冲突概率。只有当需要获取总数时,才将base值与所有Cell的value累加。文章还巧妙地分析了其中的权衡:在低并发时,CAS更新base值大概率成功,不会立即进入分段逻辑,从而兼顾了空间与效率。此外,当分段更新本身也失败时,`retryUpdate`方法会进行cells数组的扩容和重哈希,进一步降低冲突。 作者通过逐行解析`add`方法和`retryUpdate`逻辑,清晰地揭示了这种以空间换时间、通过降低热点数据“热度”来换取吞吐量提升的精妙设计。这正是一篇典型的源码分析文章,带我们看到了高并发场景下无锁算法的一个经典优化范例。