【发布时间】:2012-05-02 13:44:31
【问题描述】:
这几天我学习了一点并行性,遇到了this这个例子。
我将它与这样的顺序 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);
}
我很惊讶地看到 NoParallel 方法完成的速度比网站上给出的并行示例快得多。
我有一台 i5 电脑。
我真的认为 Parallel 方法会更快完成。
对此有合理的解释吗?也许我误解了什么?
【问题讨论】:
-
你能确认并行版本实际上是在多核上运行的吗?当你增加迭代次数(更大的
Range)会发生什么? -
假设并行版本确实在多个内核上运行,它可以简单地显示线程同步可能有多少开销......尤其是在一段微不足道的代码中。
-
套用马克吐温的话; “有谎言,该死的谎言,统计数据和基准......”