LMAX Distruptor Partition и объединение пакетов - PullRequest
0 голосов
/ 20 октября 2018

Итак, в настоящее время у меня есть реализация 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 мс, и я хотел их параллельно выполнить.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 20 ноября 2018

Я думаю, вам следует взглянуть на опции worker-pool , а затем обработчик финальных событий, который повторно объединяет шарды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...