2011-08-27 33 views
1

我是C#4.0中的並行編程新手。我明白並行編程和多線程是兩回事。現在在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(); 

這將如何在Core 2 Duo處理器上工作。我其實是想清楚我的概念。

回答

3

task1的計算將在單線程上執行,與您當前所在的線程不同。實際發生的情況取決於您發佈的代碼之下的代碼。

  • 如果沒有什麼東西,它在主要方法中,任務可能會停在中間。

  • 如果有task1.Wait()或使用task1.Result的東西,當前線程將等待,直到任務完成,並且使用TPL不會獲得任何性能優勢。

  • 如果還有其他一些重大計算,然後從前一點開始,那麼這兩個計算將並行運行。

如果你想運行在平行for循環,使用所有可用的內核,你應該使用Parallel.ForPLINQ

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

*實際上,任務可以在相同的實際運行線程,在某些情況下,但這不是相關的。