Итак, в настоящее время у меня есть реализация Executor с очередью блокировки, и специфическая реализация похожа на то, что у меня есть список элементов на запрос, и я делю их на разделы, после чего каждый раздел вычисляется и, наконец, они объединяются, чтобы получить окончательный список.
Как мне реализовать его в 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 мс, и я хотел их параллельно выполнить.
Любая помощь очень ценится.