Disruptor-Beispiel mit 1 Publisher und 4 parallelen Consumer
In diesem Beispielhttps://stackoverflow.com/a/9980346/93647 und hierWarum ist mein Störungsbeispiel so langsam? (am Ende der Frage) Es gibt 1 Verlag, der Artikel veröffentlicht, und 1 Verbraucher.
In meinem Fall ist die Verbraucherarbeit jedoch viel komplizierter und nimmt einige Zeit in Anspruch. Ich möchte also 4 Verbraucher, die Daten parallel verarbeiten.
Also zum Beispiel, wenn der Produzent Zahlen produziert: 1,2,3,4,5,6,7,8,9,10,11 ..
Ich möchte, dass Verbraucher1 1,5,9 fängt, ... Verbraucher2 2,6,10 fängt, ... Verbraucher3 3,7,11 fängt, ... Verbraucher4 4,8,12 fängt ... ( Nun, nicht genau diese Zahlen, die Idee ist, dass Daten parallel verarbeitet werden sollten. Es ist mir egal, welche bestimmte Nummer auf welchem Verbraucher verarbeitet wird.
Und denken Sie daran, dass dies parallel erfolgen muss, da die Arbeit mit dem Endverbraucher in einer realen Anwendung ziemlich teuer ist. Ich erwarte, dass Consumer in verschiedenen Threads ausgeführt werden, um die Leistung von Multicore-Systemen zu nutzen.
Natürlich kann ich auch nur 4 Ringpuffer erstellen und 1 Consumer an 1 Ringpuffer anschließen. Auf diese Weise kann ich das ursprüngliche Beispiel verwenden. Aber ich glaube, das wäre nicht richtig. Wahrscheinlich wäre es richtig, 1 Publisher (1 Ringbuffer) und 4 Consumer anzulegen - das ist es, was ich brauche.
Hinzufügen eines Links zu einer sehr ähnlichen Frage in Google Groups:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ
Wir haben also zwei Möglichkeiten:
Ein Ring für viele Verbraucher (jeder Verbraucher wird bei jedem Zusatz "aufgeweckt", alle Verbraucher sollten die gleiche WaitStrategy haben)Viele "ein Ring - ein Verbraucher" (jeder Verbraucher wird nur mit den Daten aufgeweckt, die er verarbeiten soll. Jeder Verbraucher kann eine eigene WaitStrategy haben).