Я хочу реализовать множество шаблонов издателя/подписчика с использованием Java и в настоящее время исчерпывает идеи.Параллельная реализация шаблона издателя/подписчика
Существует 1 подписчик издателя и N, издатель публикует объекты, тогда каждый абонент должен обрабатывать каждый из объектов один раз и только один раз в правильном порядке. Издатель и каждый подписчик работают в своем потоке.
В моей первоначальной реализации каждый абонент имеет свою собственную блокирующую очередь, а издатель помещает объекты в каждую из абонентских очередей. Это работает нормально, но издатель будет заблокирован, если какая-либо из очереди абонента будет заполнена. Это приводит к снижению производительности, поскольку каждый абонент занимает различное время при обработке объекта.
Затем в другой реализации издатель удерживает объект в своей очереди. Наряду с объектом с ним связан счетчик AtomicInteger с количеством подписчиков. Затем каждый подписчик заглядывает в очередь и уменьшает счетчик и удаляет его из очереди, когда счетчик достигает нуля.
Таким образом, издатель свободен от блокировки, но теперь подписчику придется ждать друг друга, чтобы обработать объект, удалив объект из очереди, до того, как следующий объект может быть заархивирован.
Есть ли лучший способ сделать это? Я предполагаю, что это должна быть довольно распространенная картина.
мне интересно, если Акку с асинхронным сообщениями объект, может помочь в этом случае? – Wudong