【问题标题】:How TPL works in a multicore processorTPL 如何在多核处理器中工作
【发布时间】:2011-08-28 04:30:36
【问题描述】:

我是 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();

这将如何在 core 2 duo 处理器中工作。我实际上是想弄清楚我的概念。

【问题讨论】:

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


    【解决方案1】:

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

    • 如果那里什么都没有,并且在 main 方法中,则任务可能会在中间停止。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 2015-12-29
      • 2014-12-17
      • 2023-03-04
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多