Ich würde mich freuen, wenn Sie mir auf einfache Weise erklären könnten, wie das Störgeräusch funktioniert. Dieses Konzept war mir bekanntlich schwer vorstellbar.
Vielleicht könnte ich es mit Ihrer Hilfe nachvollziehen.
java
design-patterns
multithreading
real-time
chrisapotek
quelle
quelle
Antworten:
Der Fowler-Artikel bietet eine gute Einführung, und diese Erklärung:
Ein konventionellerer Ansatz könnte eine Producer-Warteschlange und eine Consumer-Warteschlange verwenden, die jeweils Sperren als Parallelitätsmechanismen verwenden. In der Praxis kommt es bei Produzenten- und Konsumentenwarteschlangen dazu, dass die Warteschlangen die meiste Zeit entweder vollständig leer oder voll sind, was zu Sperrenkonflikten und verschwendeten Taktzyklen führt. Der Disruptor mildert dies teilweise dadurch, dass alle Produzenten und Konsumenten denselben Warteschlangenmechanismus verwenden und sich durch Beobachtung der Sequenzzähler aufeinander abstimmen, anstatt Sperrmechanismen zu verwenden.
quelle
Aus diesem Artikel über CoralQueue :
Produzenten und Konsumenten treten also nicht innerhalb der kreisförmigen Anordnung aufeinander, indem sie ihre entsprechenden Sequenzen überprüfen . Und um ihre Sequenzen miteinander zu kommunizieren, verwenden sie Speicherbarrieren anstelle von Sperren. Dies ist die schnellste Art und Weise, ohne Sperren zu kommunizieren.
Glücklicherweise müssen Sie nicht auf die internen Details des Disruptormusters zurückgreifen, um es zu verwenden. Neben der LMAX-Implementierung gibt es CoralQueue, das von Coral Blocks entwickelt wurde und mit dem ich verbunden bin. Einige Leute finden es einfacher, ein Konzept durch Lesen von Code zu verstehen. Im Folgenden finden Sie ein einfaches Beispiel für einen einzelnen Produzenten, der Nachrichten an einen einzelnen Verbraucher sendet. Sie können diese Frage auch für ein Beispiel eines Demultiplexers (ein Produzent zu mehreren Konsumenten) prüfen .
Haftungsausschluss: Ich bin einer der Entwickler von CoralQueue.
quelle