执行并行方法 Parallel.For 和 Parallel.ForEach,
内部提供自己的负载平衡和分区以更好地执行?
如果是这样,您想在什么情况下使用 Partitioner 类编写自己的分区以提高性能?
执行并行方法 Parallel.For 和 Parallel.ForEach,
内部提供自己的负载平衡和分区以更好地执行?
如果是这样,您想在什么情况下使用 Partitioner 类编写自己的分区以提高性能?
这些例程确实提供了自己的分区。
它们基于“典型”场景,但有时可能需要指导,特别是在不寻常的情况下。
例如,IEnumerable<T>
实现(未实现IList<T>
)的默认分区将从每个任务的一个小组开始,然后慢慢增长。但是,如果您知道您IEnumerable<T>
将一次缓慢地喂一个项目,这将导致阻塞,因为Parallel
该类将“等待”下一个项目,直到它接收到足够的分区元素并对其进行调度。
通过提供您自己的分区器,您可以防止这种情况,并获得更好的吞吐量。
自定义分区器帮助的另一个很好的例子是,如果每个循环项的工作量非常少。在这种情况下,自己分区并在分区上工作可以避免不必要的开销。这在 MSDN 上的How to: Speed Up Small Loop Body页面中有介绍。