Java: высокопроизводительная передача сообщений (один производитель / один потребитель)
Я изначально задавал этот вопросВот, но я понял, что мой вопрос не о цикле пока-правда. Я хочу знать, как правильно выполнять высокопроизводительную асинхронную передачу сообщений в Java?
Что я пытаюсь сделать ...
У меня ~ 10000 потребителей, каждый из которых потребляет сообщения из своих частных очередей. У меня есть один поток, который создает сообщения одно за другим и помещает их в правильную очередь потребителя. Каждый потребитель зацикливается на неопределенный срок, проверяя наличие сообщения в своей очереди и обрабатывая его.
Я считаю, что термин «один производитель / один потребитель», так как есть один производитель, и каждый потребитель работает только в своей частной очереди (несколько потребителей никогда не читают из одной и той же очереди).
Внутри Consumer.java:
@Override
public void run() {
while (true) {
Message msg = messageQueue.poll();
if (msg != null) {
... // do something with the message
}
}
}
Производитель быстро помещает сообщения в очереди сообщений потребителя (несколько миллионов сообщений в секунду). Потребители должны обрабатывать эти сообщения как можно быстрее!
Обратите вниманиеwhile (true) { ... }
завершается сообщением KILL, отправленным Производителем в качестве последнего сообщения.
Тем не менее, мой вопрос о том, как правильно организовать передачу сообщений. Какую очередь я должен использовать для messageQueue? Должен ли он быть синхронным или асинхронным? Как должно быть разработано Сообщение? Должен ли я использовать цикл while-true? Должен ли потребитель быть темой или чем-то еще? Будут ли 10000 потоков замедляться до ползания? Какая альтернатива темам?
Так,Как правильно делать высокопроизводительную передачу сообщений в Java?