Gostaria que você pudesse me explicar de uma maneira simples como o padrão do disruptor funciona. Este conceito foi ilusório para mim desde o começo.
Talvez com sua ajuda eu possa entender.
java
design-patterns
multithreading
real-time
chrisapotek
fonte
fonte
Respostas:
O Artigo Fowler fornece uma boa cartilha, e esta explicação:
Uma abordagem mais convencional pode usar uma Fila do Produtor e uma Fila do Consumidor, cada uma usando bloqueios como mecanismos de simultaneidade. Na prática, o que acontece com as filas de produtores e consumidores é que as filas ficam completamente vazias ou completamente cheias na maioria das vezes, o que causa contenção de bloqueio e ciclos de relógio desperdiçados. O disruptor alivia isso, em parte, fazendo com que todos os produtores e consumidores usem o mesmo mecanismo de fila, coordenando entre si observando os contadores de sequência em vez de usar mecanismos de bloqueio.
fonte
Deste artigo sobre CoralQueue :
Portanto, produtores e consumidores não se põem dentro da matriz circular verificando suas seqüências correspondentes . E para comunicar suas seqüências um para o outro, eles usam barreiras de memória em vez de bloqueios. Essa é a maneira mais rápida e segura de se comunicar.
Felizmente, você não precisa se concentrar nos detalhes internos do padrão de disruptor para usá-lo. Além da implementação do LMAX, existe o CoralQueue, desenvolvido pela Coral Blocks, ao qual sou afiliado. Algumas pessoas acham mais fácil entender um conceito lendo o código; portanto, abaixo está um exemplo simples de um único produtor enviando mensagens para um único consumidor. Você também pode verificar esta pergunta para obter um exemplo de desmultiplexador (um produtor para muitos consumidores).
Disclaimer: Eu sou um dos desenvolvedores do CoralQueue.
fonte