私は最初にここでこの質問をしましたが、私の質問はしばらくの間真のループに関するものではないことに気づきました。私が知りたいのは、Javaで高性能の非同期メッセージパッシングを行う適切な方法は何ですか?
私がやろうとしていること...
私には約10,000人のコンシューマーがいて、それぞれがプライベートキューからのメッセージを消費しています。メッセージを1つずつ生成し、それらを正しいコンシューマーのキューに入れるスレッドが1つあります。各コンシューマーは無期限にループし、キューに表示されるメッセージをチェックして処理します。
プロデューサーは1人で、各コンシューマーはプライベートキューでのみ機能するため、「単一のプロデューサー/単一のコンシューマー」という用語だと思います(複数のコンシューマーが同じキューから読み取ることはありません)。
Consumer.javaの内部:
@Override
public void run() {
while (true) {
Message msg = messageQueue.poll();
if (msg != null) {
... // do something with the message
}
}
}
プロデューサーは、メッセージをコンシューマーメッセージキュー内に急速に配置しています(1秒あたり数百万メッセージ)。消費者はこれらのメッセージをできるだけ速く処理する必要があります!
注:はwhile (true) { ... }
、最後のメッセージとしてプロデューサーによって送信されたKILLメッセージによって終了します。
ただし、私の質問は、このメッセージパッシングを設計する適切な方法についてです。messageQueueにはどのような種類のキューを使用する必要がありますか?同期または非同期のどちらにする必要がありますか?メッセージはどのように設計する必要がありますか?while-trueループを使用する必要がありますか?コンシューマーはスレッド、または他の何かである必要がありますか?10,000スレッドはクロールまで遅くなりますか?スレッドに代わるものは何ですか?
では、Javaで高性能のメッセージパッシングを行うための適切な方法は何でしょうか。