TPL如何在多核处理器中运行

时间:2011-08-27 18:40:23

标签: c# parallel-processing task-parallel-library

我是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处理器中工作。我实际上是想清楚我的概念。

1 个答案:

答案 0 :(得分:3)

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

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

  • 如果有task1.Wait()或使用task1.Result的内容,当前线程将等到任务完成后,您将无法使用TPL获得任何性能优势。

    < / LI>
  • 如果还有其他一些重要的计算,然后是前一点,那么这两个计算将并行运行。

如果您要使用所有可用内核并行运行for循环,则应使用Parallel.ForPLINQ

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

*实际上,在某些情况下,任务可以在同一个实际线程上运行,但这与此无关。