Disruptor 中 RingBuffer 的读写
by 陈健森 at 2016.7
简述
public final class RingBuffer<E> implements Cursored, DataProvider<E> {
private final int indexMask;
//indexMask = bufferSize - 1,用于数组映射索引:映射后的索引号 = 实际索引号 & (bufferSize - 1)
private final Object[] entries; //缓冲区用数组实现
private final int bufferSize; //数组的大小
private final Sequencer sequencer;
//Sequencer接口包括MultiProducerSequencer和SingleProducerSequencer两种实现。根据名称可以看出,
//MultiProducerSequencer主要是多个生产者线程使用,SingleProducerSequencer是单个生产者线程使用。
//RingBuffer使用了一个类似于代理的模式,调用自身的sequencer来完成部分功能。
......
//在初始化ringbuffer的时候,会进行填充数组
private void fill(EventFactory<E> eventFactory) {
for (int i = 0; i < entries.length; i++){
entries[i] = eventFactory.newInstance();
}
}
}从 Ringbuffer 读取

写入 Ringbuffer



Last updated