2011-08-27 16 views
1

C#4.0での並列プログラミングは初めてです。私は並列プログラミングとマルチスレッドは2つの異なることを理解しています。 TPLでは、以下のようなタスクを作成すれば、TPLはマルチコアプロセッサでどのように動作するか

Task<int> task1 = new Task<int>(() => { 
       for (int i = 0; i < 100; i++) { 
        sum += DoSomeHeavyCalculation(i); 
       } 
       return sum; 
      }); 

      // start the task 
      task1.Start(); 

コア2デュオプロセッサではどのように動作しますか?私は実際に私の概念を明確にしようとしています。

答えて

3

task1の計算は、あなたが現在行っているものとは別のシングルスレッドで実行されます。実際に何が起こるかは、投稿したコードの下のコードによって異なります。

  • メインメソッドには何もない場合は、タスクが途中で停止する可能性があります。

  • などある場合は、task1.Resultを使用している場合、現在のスレッドはタスクが終了するまで待機し、TPLを使用することによるパフォーマンス上の利点は得られません。

  • 重い計算があり、前の点から何かがある場合、それらの2つの計算は並行して実行されます。

すべてのあなたの利用可能なコアを使用して、並列にforループを実行したい場合は、あなたがParallel.ForPLINQを使用する必要があります。

ParallelEnumerable.Range(0, 100).Select(DoSomeHeavyCalculation).Sum() 

は、*実際には、タスクが同じ実際に実行することができますいくつかの状況下では、スレッドは、それはここでは関係ありません。

関連する問題