Ejemplo de disruptor con 1 editor y 4 consumidores paralelos.
En este ejemplohttps://stackoverflow.com/a/9980346/93647 y aquí¿Por qué mi ejemplo de disruptor es tan lento? (al final de la pregunta) hay 1 editor que publica artículos y 1 consumidor.
Pero en mi caso el trabajo del consumidor es mucho más complicado y toma algo de tiempo. Así que quiero 4 consumidores que procesen datos en paralelo.
Así, por ejemplo, si el productor produce números: 1,2,3,4,5,6,7,8,9,10,11.
Quiero que consumer1 atrape 1,5,9, ... consumer2 para atrapar 2,6,10, ... consumer3 para atrapar 3,7,11, ... consumer4 para atrapar 4,8,12 ... ( bueno, no exactamente estos números, la idea es que los datos deben procesarse en paralelo, no me importa qué cierto número se procesa en qué consumidor)
Y recuerde que esta necesidad se debe hacer en paralelo, ya que en aplicaciones reales el trabajo del consumidor es bastante costoso. Espero que los consumidores se ejecuten en diferentes subprocesos para utilizar la potencia de los sistemas multinúcleo.
Por supuesto, solo puedo crear 4 ringbuffers y adjuntar 1 consumidor a 1 ring-buffer. De esta manera puedo usar el ejemplo original. Pero siento que no sería correcto. Probablemente sería correcto crear 1 editor (1 ringbuffer) y 4 consumidores, ya que esto es lo que necesito.
Agregando un enlace a una pregunta muy similar en los grupos de google:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ
Así que tenemos dos opciones:
un anillo a muchos consumidores (cada consumidor se "despertará" con cada adición, todos los consumidores deberían tener la misma WaitStrategy)muchos "un anillo - un consumidor" (cada consumidor se activará solo con los datos que debe procesar. Cada consumidor puede tener su propia WaitStrategy).