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双核处理器。我其实是想把我的概念讲清楚。

TPL如何在多核处理器中工作

task1的计算将在单线程上执行,不同于您当前所处的线程。实际发生的情况取决于您发布的代码下面的代码。

  • 如果在主方法中没有任何内容,任务可能会在中间停止。

  • 如果有task1.Wait()或其他使用task1.Result的线程,当前线程将等待直到任务完成,并且您不会从使用TPL获得任何性能优势。

  • 如果有其他一些繁重的计算,然后是前一点的东西,这两个计算将并行运行。

如果您想并行运行for循环,使用所有可用的内核,您应该使用Parallel.For或PLINQ:

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

*事实上,在某些情况下,任务可以在同一个线程上运行,但这里不相关