私は、どの解決策を取るべきかを決めることができないという問題の真っ只中にいます。
問題は少し独特です。このように言えば、私はネットワークから継続的にデータを受信しています(1秒間に2〜4回)。これで、各データは異なる、たとえばグループに属します。ここで、これらのグループをgroup1、group2などと呼びましょう。
各グループには専用のジョブキューがあり、ネットワークからのデータがフィルタリングされ、対応するグループに追加されて処理されます。
最初に、グループごとに専用のスレッドを作成しました。このスレッドは、ジョブキューからデータを取得し、それを処理してから、(リンクされたブロックキューを使用して)ブロック状態になります。
しかし、私の先輩は、スレッドプールを使用することを提案しました。これにより、スレッドがブロックされず、他のグループが処理に使用できるようになるためです。
しかし、ここに問題があります。取得するデータは十分に高速であり、スレッドが処理するのにかかる時間は、スレッドがブロッキングモードに移行しないのに十分な長さです。また、これにより、データが順番に処理されることが保証されます(ジョブ1はジョブ2の前に実行されます)。これは、プーリングではほとんど発生しない可能性があります。
私の先輩はまた、スレッドがプールされているので、プールによって多くのメモリが節約されるという事実に傾倒しています(彼は本当に言葉を求めていたと思います;))。私はこれに同意しませんが、個人的には、プールされているかどうかにかかわらず、各スレッドが独自のスタックメモリを取得していると思います。スレッドプールに私が気付いていないものがない限り。
最後に、プーリングは、短時間で大量のジョブが表示される場合に役立つと常に考えていました。スレッドの初期化にかかる時間はジョブの実行に費やされる時間よりもはるかに長いため、スレッドの生成はパフォーマンスの低下につながるため、これは理にかなっています。したがって、プーリングはここで大いに役立ちます。
しかし、私の場合、group1、group2、...、groupNは常に生きたままです。したがって、データがあるかどうかにかかわらず、それらはまだそこにあります。したがって、ここではスレッドの生成は問題ではありません。
私の先輩は確信が持てず、メモリフットプリントが大きいため、プーリングソリューションを使用することを望んでいます。
では、どの道をたどるべきでしょうか?
ありがとうございました。