2011-08-27 36 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() 

*实际上,任务可以在相同的实际运行线程,在某些情况下,但这不是相关的。