Пример разрушителя с 1 издателем и 4 параллельными потребителями
В этом примереhttps://stackoverflow.com/a/9980346/93647 и здесьПочему мой пример разрушителя такой медленный? (в конце вопроса) есть 1 издатель, который публикует товары, и 1 потребитель.
Но в моем случае работа с потребителем намного сложнее и занимает некоторое время. Поэтому я хочу, чтобы 4 потребителя обрабатывали данные параллельно.
Так, например, если производитель производит цифры: 1,2,3,4,5,6,7,8,9,10,11.
Я хочу, чтобы customer1 поймал 1,5,9, ... consumer2 поймал 2,6,10, ... consumer3 поймал 3,7,11, ... consumer4 поймал 4,8,12 ... ( ну не совсем эти цифры, идея в том, что данные должны обрабатываться параллельно, мне все равно, какое определенное число обрабатывается на каком потребителе)
И помните, что это нужно делать параллельно, потому что в реальных приложениях работа с потребителем довольно дорогая. Я ожидаю, что потребители будут выполняться в разных потоках, чтобы использовать возможности многоядерных систем.
Конечно, я могу просто создать 4 кольцевых буфера и подключить 1 потребителя к одному кольцевому буферу. Таким образом, я могу использовать оригинальный пример. Но я чувствую, что это не будет правильно. Скорее всего, было бы правильно создать 1 издателя (1 рингбуфер) и 4 потребителя - так как это то, что мне нужно.
Добавление ссылки на очень простой вопрос в группах Google:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ
Итак, у нас есть два варианта:
один звонок - много потребителей (каждый потребитель будет «просыпаться» при каждом добавлении, все потребители должны иметь одинаковую WaitStrategy)много «один звонок - один потребитель» (каждый потребитель проснется только от данных, которые он должен обработать. у каждого потребителя может быть собственный WaitStrategy).