【发布时间】:2012-11-13 12:04:20
【问题描述】:
如果我运行这个测试:
var r = new Random();
var ints = new int[13];
Parallel.For(0, 2000000, i => {
var result = r.Next(1, 7) + r.Next(1, 7);
ints[result] += 1;
});
我得到以下结果:
2: 92,14445
3: 0,41765
4: 0,62245
5: 0,82525
6: 1,04035
7: 1,25215
8: 1,0531
9: 0,8341
10: 0,6334
11: 0,4192
12: 0,2109
当我使用常规 For 时:
for (int i = 0; i < 2000000; i++) {
var result = r.Next(1, 7) + r.Next(1, 7);
ints[result] += 1;
}
输出是:
2: 2,7797
3: 5,58645
4: 8,3414
5: 11,09935
6: 13,8909
7: 16,6731
8: 13,82895
9: 11,10205
10: 8,3424
11: 5,5712
12: 2,7845
最后一个结果是三角分布,它是预期的输出。
我的问题的目的不是讨论并行性的适用性。问题是为什么 Parallel.For 会这样?
【问题讨论】:
-
你能显示运行这两个测试的 100 个结果吗?
-
你的机器有多少个处理器?
-
当你掷两个骰子时,你通常会得到
2,除非你是连续的;-) -
您确定您拥有的是正态分布吗?在我看来,它看起来更像是一个以 7 为中心的三角形。
标签: c# multithreading c#-4.0 parallel-processing