简短的回答: 是的 ,操作通常将在可用核心(的一部分)上完成。但是 通信开销很大 。 在您的示例中,工作量与开销相比太小 。
如果您构建一个池,那么将构造许多 工人 。如果然后指示给
map定输入。发生以下情况:
- 数据将被 分割 :每个工人获得大约公平的份额;
- 数据将 传达 给工人;
- 每个工人都要 处理他们 的工作;
- 结果被 传达回过程 ; 和
- 主要过程 将结果分组在一起 。
现在,拆分,通信和联接数据是由主流程执行的所有流程。这些 不能并行化* 。由于操作速度快(输入大小为 n的 O(n) ),因此开销的
时间复杂度相同 。 __ *
如此复杂,即使您拥有数百万个内核,也不会有太大区别,因为传送列表可能已经比计算结果昂贵。
这就是为什么您应该并行执行 计算量大的任务 。没有简单的任务。处理量应该是 大的 相比通信量。
在您的示例中,这项工作是 微不足道的 :您将1加到所有元素上。但是,序列化并不是那么简单:您必须对发送给工作人员的列表进行编码。



