TPL(タスク並列ライブラリ)がロジック/コードを並列で実行することは保証されていないことをMSDNで読みました。だから私の質問は、どのような状況でコードが順番に実行されるかということです.?
コードがシングル コア プロセッサに展開されるときは? または、.Net フレームワークのスレッド プールの枯渇が発生したときは? または、「ハードウェア スレッド」/「論理コア」がビジーで、その時点で「ハードウェア スレッド」/「論理コア」を 1 つしか割り当てることができない場合は?
TPL(タスク並列ライブラリ)がロジック/コードを並列で実行することは保証されていないことをMSDNで読みました。だから私の質問は、どのような状況でコードが順番に実行されるかということです.?
コードがシングル コア プロセッサに展開されるときは? または、.Net フレームワークのスレッド プールの枯渇が発生したときは? または、「ハードウェア スレッド」/「論理コア」がビジーで、その時点で「ハードウェア スレッド」/「論理コア」を 1 つしか割り当てることができない場合は?
これは、TPL メソッドの ParallelOptions に設定された TaskSchedulerによって決定されます。これにより、TaskScheduler を、必要な麻痺の計画を実行できるカスタムのものに簡単に置き換えることができます。
TPL と PLINQ が使用する既定のスケジューラはThreadPoolです。1 つのスレッドを使用して開始し、アルゴリズムがより多くのスレッドが有用であることを検出すると、スレッドを追加します (ただし、タスクが CPU バウンドでない場合、アルゴリズムは誤った仮定を行い、問題を引き起こす可能性があります)。
無料の本Patterns for Parallel Programmingを読むことを強くお勧めします。これについて詳しく説明しています。しかし、タスク スケジューラがどのように機能するかについて詳しく説明している、私が読んだ中で最も優れた本は、Professional Parallel Programming with C#です (第 8 章はすべてスレッド プールに関するものです)。
パッケージSamples for Parallel Programming with the .NET Frameworkをダウンロードすることもお勧めします。これには、並列プログラミングの多くの概念を説明するのに役立つ、よくコメントされたプロジェクトがたくさん含まれています。