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?

Ответы на вопрос(5)

Ваш ответ на вопрос