Task Parallel Library を使用してソリューションの並列検索を実行する小さなライブラリに取り組んでいます。現在の設計は次のように機能します。
- ConcurrentQueue は検索の結果を受け取り、
- メイン タスクはループとして機能し、バックグラウンド スレッドとして動作します。新しいソリューションがキューに到着すると、キューから取り出して処理し、新しいタスクで新しい検索を開始します。
- 検索は独自のタスクで起動され、完了するとその結果がキューに返されます。
[Eric J の回答に基づく編集: 関連するアクティビティは完全に CPU に依存しており、IO は関与していません]
フレームワークは今のところそのままでうまく機能します。ただし、トリガーされる検索タスクの数は完全に制御できます。私の理解では、TPL は今のところ状況を非常にうまく処理しますが、システムに大量の検索を押し込んでも並列処理は増加しません。システムで利用可能なコアの数に制限され、一定のレベルになると非生産的になります。
私の質問は次のとおりです。実行される検索タスクの数を制限することで TPL を「助ける」ことができますか? もしそうなら、その上限をどうするかを決定するにはどうすればよいでしょうか? たとえば System.Environment.ProcessorCount に基づいて制限するのは適切でしょうか?