Exemplo de Disruptor com 1 publicador e 4 consumidores paralelos

Neste exemplohttps://stackoverflow.com/a/9980346/93647 e aquiPor que meu exemplo de disruptor é tão lento? (no final da pergunta) há 1 editora que publica itens e 1 consumidor.

Mas no meu caso, o trabalho do consumidor é muito mais complicado e leva algum tempo. Então eu quero 4 consumidores que processam dados em paralelo.

Então, por exemplo, se produtor produzir números: 1,2,3,4,5,6,7,8,9,10,11 ..

Quero que o consumidor1 pegue 1,5,9, ... o consumidor2 pegue 2,6,10, ... o consumidor3 pegue 3,7,11, ... o consumidor4 pegue a 4,8,12 ... ( bem, não exatamente esses números, a idéia é que os dados devem ser processados ​​em paralelo, não importa qual número seja processado em qual consumidor)

E lembre-se de que isso precisa ser feito em paralelo, porque o trabalho real do consumidor de aplicativos é muito caro. Espero que os consumidores sejam executados em diferentes threads para usar a energia de sistemas multicore.

É claro que posso criar apenas 4 ringbuffers e anexar 1 consumidor a 1 ring-buffer. Dessa forma, posso usar o exemplo original. Mas sinto que não seria correto. Provavelmente seria correto criar 1 editor (1 ringbuffer) e 4 consumidores - pois é isso que eu preciso.

Adicionando link para uma pergunta muito simular em grupos do google:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ

Então nós temos duas opções:

um anel muitos consumidores (cada consumidor vai "acordar" em cada adição, todo consumidor deve ter o mesmo WaitStrategy)muitos "um anel - um consumidor" (cada consumidor acordará apenas nos dados que ele deve processar. cada consumidor pode ter seu próprio WaitStrategy).

questionAnswers(2)

yourAnswerToTheQuestion