我是C#4.0中并行编程的新手。我知道并行编程和多线程是两回事。现在在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 duo处理器中工作。我实际上是想清楚我的概念。
答案 0 :(得分:3)
task1
的计算将在单线程上执行,与您当前使用的线程不同*。实际发生的情况取决于您发布的代码下面的代码。
如果主要方法中没有任何内容,那么任务可能会在中间停止。
如果有task1.Wait()
或使用task1.Result
的内容,当前线程将等到任务完成后,您将无法使用TPL获得任何性能优势。
如果还有其他一些重要的计算,然后是前一点,那么这两个计算将并行运行。
如果您要使用所有可用内核并行运行for
循环,则应使用Parallel.For
或PLINQ:
ParallelEnumerable.Range(0, 100).Select(DoSomeHeavyCalculation).Sum()
*实际上,在某些情况下,任务可以在同一个实际线程上运行,但这与此无关。