因此,当前我有一个带有阻塞队列的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毫秒,我想并行执行它们。
非常感谢您的帮助。