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

标签 java performance disruptor-pattern

我正在寻找使用 dirsuptor 环形缓冲区来解析文件。但我不知道如何为环形缓冲区设置一个值范围。

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

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

通常我的缓冲区比我读取的字节大两倍。像这样,我可以在计算一页时读取另一页(例如字节数组长度==缓冲区/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);
}

谢谢

最佳答案

自版本 3.0.0支持批量发布Disruptor。

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

鉴于您的示例代码,我怀疑您想查看 this版本,并提供一个 UUID 数组。有多个版本,具体取决于您希望传递给翻译器的参数数量。

alternative version是在 EventTranslator 自身中捕获 UUID。

关于java - Disruptor如何使用他的环形缓冲区来读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22607186/

相关文章:

java - 打印从数组列表中随机删除的元素,然后打印更新后的数组列表

java - 单击按钮时如何重新启动 JavaFX 应用程序

javascript - javascript 是否有 blit 或 memcpy 命令?

r - "*apply"家族真的没有矢量化吗?

JAVA AWT SWING代码移植到Android NDK

java - 检查像素坐标偏移的高效代码

design-patterns - 什么是 LMAX Disruptor 设计模式?

java - 是否应该将 Disruptor (LMAX) 与内存和 CQRS 中的大模型一起使用?

java - 在 Java 中重写泛型集合时出错