gpt4 book ai didi

java - Disruptor - 环形缓冲区

转载 作者:搜寻专家 更新时间:2023-11-01 02:06:21 27 4
gpt4 key购买 nike

我正在研究LMAX Disruptor的源代码,我进入了RingBuffer抽象类。为什么 RingBufferPad 中正好有 7 个长字段 (p1 ... p7)?这是实际代码: 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
{
....

最佳答案

这是为了确保实际使用的 long 值在它自己的缓存行上。这避免了 false sharing您有两个 long 需要由竞争同一缓存行的不同线程更新。

这里假设 CPU 缓存行长度为 64 字节(大多数架构都是这样,例如 ARM、AMD 和 Intel CPU)。使用 7 个 long 有点偏执,因为 header 最小为 8 个字节,最大为 16 个字节(分配对齐),所以 6 个甚至 5 个 long 值就足够了。

关于java - Disruptor - 环形缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31966781/

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