私は現在、練習として単純なP2Pネットワークを開発中です。ネットワーク内の各ノードは、ハートビートを他のノードのサブセットに送信して、ネットワークを離れたノードを検出できるようにします。ハートビートパケットの横に、新しいノードがネットワークに参加/離脱したとき、リソース(小さなテキストファイル)などを探したいときにパケットを送信します。すべてのパケットはUDPパケットです。多くの受信パケットを処理する最良の方法
パケットを受信するたびに、その特定のパケットを処理する新しいスレッドを開始します。しかし、私は1つのアプリケーションライフタイムの間に(特にハートビートのために)非常に多くなるスレッドの量に関係しています。 (私が避けたいデッドロックなどのリスクもあります)。
私はすべての着信パケットを入れ、そのキューから一度に1つのパケットを処理する単一のスレッド(プロデューサ - コンシューマパターンのようなもの)を持つことを考えました。パケットをすばやく処理して、送信者がパケットが失われたとは思わないようにしたいと思います。
それぞれの新しいスレッドを開始することなく、多くの異なる着信パケットを処理する最善の方法は何ですか?私が持っているものと一緒に行くべきか、プロデューサーを消費するのか、それとも何か違うの?
LinkedListとともにプロデューサ - コンシューマを使用します。私が考えることができる最も簡単な方法。 – DankMemes
自分自身について言及したような昔ながらのものから始めて、ベンチマークを行い、 "Disruptor"(http://lmax-exchange.github.com/disruptor/)のような最新のものを試してから、もう少しやってみてくださいベンチマーク。 –
"多くの異なる着信パケット"を定量化するのに役立つかもしれません...相対的に言えば、現代のシステムでは通常、NICの数と種類に応じて毎秒数百から数千のパケットを処理することができます。私はハートビートが1分あたり数十の範囲にあるかもしれないと思っています... – twalberg