假设我有一个正常foreach循环中当前处理的项目列表。假设项目数明显大于核心数。在我考虑将for循环重构为Parallel.ForEach之前,每个项目应该花多少时间作为经验法则?
答案 0 :(得分:1)
这是并行编程的核心问题之一。要获得准确答案,您仍需要在确切情况下进行衡量。
然而,TPL的一大优势是门槛比以前小得多,并且当你的工作项太小时你不会受到惩罚(同样多)。
我曾经用2个嵌套循环做了一个演示,我想表明只有外部循环应该并行运行。但该演示未能显示将两者都转换为Parallel.For()的显着缺点。
因此,如果你循环中的代码是独立的,那就去吧。
#items / #cores比率不是很相关,TPL会对范围进行分区并使用“正确”的线程数量。
答案 1 :(得分:0)
在一个大型数据处理项目中,我正在处理我使用的包含两个或三个以上语句的循环,这些循环从Parallel.Foreach中受益匪浅。如果您的循环正在处理的数据是原子的,那么与Parallel库提供的巨大好处相比,我看到了很少的缺点。