Me gustaría que me explicaras de una manera simple cómo funciona el patrón disruptor. Este concepto me ha sido esquivo hasta ahora.
Quizás con tu ayuda podría comprenderlo.
java
design-patterns
multithreading
real-time
chrisapotek
fuente
fuente
Respuestas:
The Fowler Article ofrece una buena introducción, y esta explicación:
Un enfoque más convencional podría usar una cola de productor y una cola de consumidor, cada una usando bloqueos como mecanismos de concurrencia. En la práctica, lo que sucede con las colas de productores y consumidores es que las colas están completamente vacías o completamente llenas la mayor parte del tiempo, lo que provoca contención de bloqueo y ciclos de reloj desperdiciados. El disruptor alivia esto, en parte, al hacer que todos los productores y consumidores usen el mismo mecanismo de cola, coordinándose entre sí observando los contadores de secuencia en lugar de usar mecanismos de bloqueo.
fuente
De este artículo sobre CoralQueue :
Por lo tanto, los productores y los consumidores no se pisan entre sí dentro de la matriz circular al verificar sus secuencias correspondientes . Y para comunicar sus secuencias entre sí, utilizan barreras de memoria en lugar de bloqueos. Esa es la forma más rápida sin bloqueo que pueden comunicarse.
Afortunadamente, no necesita conocer los detalles internos del patrón disruptor para usarlo. Además de la implementación de LMAX, está CoralQueue desarrollado por Coral Blocks, con el que estoy afiliado. A algunas personas les resulta más fácil entender un concepto al leer el código, por lo que a continuación se muestra un ejemplo simple de un solo productor que envía mensajes a un solo consumidor. También puede consultar esta pregunta para ver un ejemplo de demultiplexor (un productor para muchos consumidores).
Descargo de responsabilidad: soy uno de los desarrolladores de CoralQueue.
fuente