在過去的幾天裏,我一直在學習一些關於並行的知識,並且我遇到了this的例子。爲什麼在這個例子中並行版本比順序版本慢?
我把它側這樣的環路的時序擺動:
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方法會更快完成。
有沒有合理的解釋呢?也許我誤解了一些東西?
你能否證實其水貨版本居然跑在多個內核?當你增加迭代次數(更大的'範圍')時會發生什麼? – chrisaycock
假設並行版本確實在多個內核上運行,它可以簡單地向您顯示多少線程同步可以具有多少開銷......特別是在一小段代碼中。 – Oded
解釋馬克吐溫; *「有謊言,該死的謊言,統計數字和基準......」* –