gpt4 book ai didi

使用 LazySet 的 JAVA volatile 变量读取性能

转载 作者:行者123 更新时间:2023-12-01 14:27:09 25 4
gpt4 key购买 nike

我想了解 JAVA 中 volatile 变量的性能。

我看到 https://brooker.co.za/blog/2012/09/10/volatile.html当有作者参与时, volatile 读取似乎很慢。我没有看到任何更多的论点或基准提及相同的内容。

AtomicReference lazySet 会如何影响 volatile 变量读取

最佳答案

从硬件 x86 的角度来看,常规读取和 volatile 读取同样便宜。 volatile 读取需要获取由 x86 的 tso 内存模型提供的语义。因此,常规加载和可变加载都具有获取语义并且同样便宜。在软件级别上存在差异,因为 volatile 读取禁止许多编译器优化。

惰性集合不会改变读取器的性能;只是编剧的表现。在 X86 上, volatile 写入是顺序一致的写入;因此需要 [StoreLoad] 并且这需要停止执行任何加载,直到存储缓冲区被耗尽。 lazySet aka orderedSet 将存储放在存储缓冲区中,然后继续。所以它不会拖延 CPU。这纯粹是作家的担忧;不是读者。所以读者不会走得更快或更慢。

对于您的情况:首先确定它是否确实是一个问题。在大多数情况下,许多其他问题正在发挥作用,并且在此级别上进行优化会使代码变得复杂并引入错误。如果这确实是一个问题,我会更关注缓存行上的争用,而不是读取/写入 volatile 变量的开销。

关于使用 LazySet 的 JAVA volatile 变量读取性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62225563/

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