Disruptor如何使用他的环形缓冲区来读取文件?

时间:2014-03-24 10:47:28

标签: java performance disruptor-pattern

我希望使用dirsuptor环缓冲区来解析文件。但是我没有看到如何为环形缓冲区设置一个值范围。

在下面的例子中似乎。它循环到每个项目以将其分配给缓冲区。但我,我想直接分配x项。

当我执行FileInputStream.read(byte [] bytes)时,我想将这些字节放入环形缓冲区。

通常我的缓冲区比我读取的字节大两倍。像这样,我可以在计算一个页面时读取另一页(例如,字节数组长度== buffer / 2):

ExecutorService exec = Executors.newCachedThreadPool();
// Preallocate RingBuffer with 1024 ValueEvents
Disruptor<ValueEvent> disruptor = new Disruptor<ValueEvent>(ValueEvent.EVENT_FACTORY, 1024, exec);

// Build dependency graph
RingBuffer<ValueEvent> ringBuffer = disruptor.start();

for (long i = 10; i < 2000; i++) {
    String uuid = UUID.randomUUID().toString();
    // Two phase commit. Grab one of the 1024 slots
    long seq = ringBuffer.next();
    ValueEvent valueEvent = ringBuffer.get(seq);
    valueEvent.setValue(uuid);
    ringBuffer.publish(seq);
}

由于

1 个答案:

答案 0 :(得分:1)

由于Disruptor的版本3.0.0,它支持批量发布。

publishEvents上有多种Ringbuffer方法,具体取决于您希望如何转换事件。

根据您的示例代码,我怀疑您要查看this版本,并提供UUID的数组。根据您希望传递给翻译者的参数数量,有多个版本。

alternative version用于捕获EventTranslator中的UUID。