文章“Atomic*.lazySet is a performance win for single writers”讨论了lazySet是一种弱 volatile 写操作(在某种意义上说,它充当商店-商店而不是商店-负载围栏)。但是我不明白如何利用半 volatile 写入来提高并发队列性能。它究竟如何像claimed by Menta-queue一样提供超低延迟?

我已经阅读了它的实现以及它在堆栈溢出问题上的声明:“How is lazySet in Java's Atomic* classes implemented”和“Atomic Integer's lazySet vs set”。

最佳答案

在x86上进行 volatile 写入的问题在于,它发出了完整的内存屏障,这导致直到store buffer被耗尽为止的停顿。同时,x86上的lazySet是一个简单的存储。它不需要刷新所有等待在存储缓冲区中的先前存储,因此允许写入线程以全速进行。

Martin Thompson's article中对此进行了一些描述。

09-25 21:47