LMAX Distruptor Partition und Batch beitreten

stimmen
1

Also zur Zeit habe ich eine Executor-Implementierung mit Warteschlange blockiert und die Implementierung spezifischer ist wie, ich habe die Liste der Artikel pro Anfrage und ich teile sie in Partitionen jede Partition dann berechnet wird, und schließlich sie verbunden sind, die endgültige Liste haben.

Wie gehe ich davon in LMAX Umsetzung? Ich sehe, dass ich einmal Partition und drücken Sie sie in Ringpuffer, jede Partition als separate Position behandelt wird, so ich brauch sie verbindenden bin. so etwas wie,

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;
}

Gibt es eine saubere Art und Weise , es zu tun? Ich sah https://github.com/LMAX-Exchange/disruptor/tree/master/src/test/java/com/lmax/disruptor/example und KeyedBatching spezifisch , aber sie scheinen zu Charge und führen auf einen Thread.

Zur Zeit für mich nimmt jede Partition um 200 ms auf, und ich wollte, dass sie parallel auszuführen.

Jede Hilfe wird sehr geschätzt.

Veröffentlicht am 20/10/2018 um 12:25
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Ich glaube , Sie einen Blick auf den nehmen sollen Arbeiter-Pool - Optionen und von einem abschließenden Ereignisprozessor an , der die Scherben wieder vereint.

Beantwortet am 20/11/2018 um 12:03
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more