LMAX Distruptor分区并加入批处理

时间:2018-10-20 12:25:44

标签: disruptor-pattern lmax

因此,当前我有一个带有阻塞队列的Executor实现,具体实现是这样的,我有每个请求的项目列表,并将它们划分为分区,然后计算每个分区,最后将它们合并在一起以得到最终列表。 / p>

如何在LMAX中实现它?我看到一旦有了分区并将其推入RingBuffer,每个分区都被视为单独的项目,因此我可以自定义加入它们。 像

ConcurrentHashMap<Long, LongAdder> map = new ConcurrentHashMap<>();
@Override
public List<SomeTask> score(final List<SomeTask> tasks) {
    long id = tasks.get(0).id;
    map.put(id, new LongAdder());
    for (SomeTask task : tasks) {
        producer.onData(task);
    }
    while (map.get(id).intValue() != tasks.size()) ;
    map.remove(id);
    return tasks;
}

有一种干净的方法吗?我专门研究了https://github.com/LMAX-Exchange/disruptor/tree/master/src/test/java/com/lmax/disruptor/example和KeyedBatching,但它们似乎是在一个线程上进行批处理和执行的。

目前对我来说,每个分区大约需要200毫秒,我想并行执行它们。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您应该看看worker-pool选项,然后是重新组合碎片的最终事件处理器。