gpt4 book ai didi

java - LongAdder 为何比 AtomicLong 表现更好

转载 作者:太空宇宙 更新时间:2023-11-04 10:16:20 24 4
gpt4 key购买 nike

我了解了 Java 的 AtomicInteger 在内部如何与 CAS(比较和交换)操作一起工作。基本上,当多个线程尝试更新值时,JVM 内部会使用底层 CAS 机制并尝试更新值。如果更新失败,则使用新值重试,但不会阻塞。

在 Java8 中,Oracle 引入了一个新类 LongAdder在高争用情况下,它似乎比 AtomicInteger 表现更好。一些博客文章声称 LongAdder 通过维护内部单元来表现更好 - 这是否意味着 LongAdder 在内部聚合值并稍后更新?您能帮我了解 LongAdder 的工作原理吗?

最佳答案

does that mean LongAdder aggregates the values internally and update it later?

是的,如果我正确理解你的陈述的话。

每个CellLongAdderAtomicLong 的变体。拥有多个这样的小区是分散竞争并从而提高吞吐量的一种方式。

当要检索最终结果(总和)时,它只是将每个单元格的值加在一起。

关于单元如何组织、如何分配等的大部分逻辑可以在源代码中看到:http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/f398670f3da7/src/java.base/share/classes/java/util/concurrent/atomic/Striped64.java

特别是单元的数量受 CPU 数量的限制:

/** Number of CPUS, to place bound on table size */
static final int NCPU = Runtime.getRuntime().availableProcessors();

关于java - LongAdder 为何比 AtomicLong 表现更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51679668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com