簡體   English   中英

LMAX Distruptor分區並加入批處理

[英]LMAX Distruptor Partition and join batch

因此,當前我有一個帶有阻塞隊列的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毫秒,我想並行執行它們。

任何幫助是極大的贊賞。

我認為您應該看看worker-pool選項,然后是重新組合碎片的最終事件處理器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM