4 つのタスクを作成する for ループがあり、各タスクはそのループ インデックスを出力します - パフォーマンスをテストするための簡単なプログラム
上記のループを 1000 回 (反復) 実行する外部ループがあります。TASK とスレッドのパフォーマンスを確認したかったのです。
(1) テスト 1: これは TASK (スレッドではなく) のみを作成すると思っていましたが、TPL を使用していることがわかりました
tasks[i] = Task.Factory.StartNew(() => Console.WriteLine(tmp));
(2) TaskCreationOptions.LongRunning で次のように書き直しました
tasks[i] = Task.Factory.StartNew(() => Console.WriteLine(tmp), TaskCreationOptions.LongRunning);
(3)次に、上記と同じコードを使用してタスクではなくスレッドをテストしようとしましたが、現在はファクトリの代わりに「新しいスレッド」を使用しています
for (int i = 0; i < 4; i++)
{
var tmp = i;
tasks[i] = new Thread(new ThreadStart(() => Console.WriteLine(tmp)));
tasks[i].Start();
tasks[i].Join();
}
タイミングの結果は、(2)、(3)、(1) の順で最高のパフォーマンスを示しました。
パフォーマンス結果の理由を説明し、上記のどれが本当に単なるタスク (OS プロセス) で、どれがスレッドを使用しているか説明してください。
プロファイラーを使用しようとしましたが、Visual Studio 2010 Professional にしかアクセスできず、プロファイラーには permium または Ultimate バージョンしか付属していないようです。