Hum*_*mad 4 java circular-buffer data-structures disruptor-pattern
我正在调查LMAX Disruptor的源代码,我进入了RingBuffer抽象类.为什么正好有7个长场(p1 ... p7)RingBufferPad?这是实际代码:https:
//github.com/LMAX-Exchange/disruptor/blob/master/src/main/java/com/lmax/disruptor/RingBuffer.java
abstract class RingBufferPad
{
protected long p1, p2, p3, p4, p5, p6, p7;
}
abstract class RingBufferFields<E> extends RingBufferPad
{
....
Run Code Online (Sandbox Code Playgroud)
这是为了确保long实际使用的值在它自己的缓存行上.这样可以避免错误共享,其中有两个long需要由竞争相同缓存行的不同线程更新.
这里假设CPU高速缓存行长度为64字节(并且它在大多数体系结构上,例如ARM,AMD和Intel CPU).使用7 longs有点偏执,因为标题将是8字节最小值,最大16字节(具有分配对齐),因此6或甚至5个long值就足够了.