为什么并行版本比本例中的顺序版本慢?

Mit*_*hir 5 c# parallel-processing

在过去的几天里,我一直在学习关于并行性的知识,我遇到了这个例子.

我把它与顺序for循环并排放在一起,如下所示:

private static void NoParallelTest()
{
    int[] nums = Enumerable.Range(0, 1000000).ToArray();
    long total = 0;
    var watch = Stopwatch.StartNew();
    for (int i = 0; i < nums.Length; i++)
    {
        total += nums[i];
    }
    Console.WriteLine("NoParallel");
    Console.WriteLine(watch.ElapsedMilliseconds);
    Console.WriteLine("The total is {0}", total);
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶地看到NoParallel方法的完成速度比网站上给出的并行示例快得多.

我有一台i5 PC.

我真的认为Parallel方法会更快完成.

对此有合理的解释吗?也许我误会了什么?

小智 11

顺序版本更快,因为在您的示例中对每次迭代执行操作所花费的时间非常少,并且创建和管理多个线程涉及相当大的开销.

并行编程仅在每次迭代在处理器时间方面足够昂贵时才提高效率.