TPL如何在多核处理器中工作
本文关键字:处理器 工作 多核 TPL | 更新日期: 2023-09-27 18:06:54
我是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双核处理器。我其实是想把我的概念讲清楚。
task1
的计算将在单线程上执行,不同于您当前所处的线程。实际发生的情况取决于您发布的代码下面的代码。
-
如果在主方法中没有任何内容,任务可能会在中间停止。
-
如果有
task1.Wait()
或其他使用task1.Result
的线程,当前线程将等待直到任务完成,并且您不会从使用TPL获得任何性能优势。 -
如果有其他一些繁重的计算,然后是前一点的东西,这两个计算将并行运行。
如果您想并行运行for
循环,使用所有可用的内核,您应该使用Parallel.For
或PLINQ:
ParallelEnumerable.Range(0, 100).Select(DoSomeHeavyCalculation).Sum()
*事实上,在某些情况下,任务可以在同一个线程上运行,但这里不相关