Plinq的Range分区与Chunk分区?

时间:2012-09-01 15:27:01

标签: c# .net .net-4.0 parallel-processing plinq

Chunk 分区中, Range 分区将更好地选择哪种情况? (和vise诗)

我已经知道了

  • 块分区:从输入中抓取小块元素进行处理,然后以小块开始,增加块大小。

  • 范围分区会为每个工作人员预分配相同数量的元素

另外,为什么这段代码:(找到素数到100000)

IEnumerable<int> numbers = Enumerable.Range (3, 100000-3);
var parallelQuery =    from n in numbers.AsParallel()
                       where Enumerable.Range (2, (int) Math.Sqrt (n)).All (i => n % i > 0)
                       select n;

使用范围分区可能会执行

虽然这段代码:(找到第一百万个数字的sqrt之和)

ParallelEnumerable.Range (1, 10000000).Sum (i => Math.Sqrt (i))

使用范围分区会更好吗?

1 个答案:

答案 0 :(得分:5)

在第一个样本中,每个项目所需的时间取决于n。在90000之后搜索下一个素数比在11之后找到的那个花费更多的时间。

因此,当划分为相等的范围时,最后的范围将比第一个范围执行更多的工作。

在第二个样本中,每次操作的时间在整个范围内相等。因此范围分区将很好地工作。