在 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))
使用范围分区会更好吗?
答案 0 :(得分:5)
在第一个样本中,每个项目所需的时间取决于n
。在90000之后搜索下一个素数比在11之后找到的那个花费更多的时间。
因此,当划分为相等的范围时,最后的范围将比第一个范围执行更多的工作。
在第二个样本中,每次操作的时间在整个范围内相等。因此范围分区将很好地工作。