【发布时间】:2017-11-18 17:43:27
【问题描述】:
我正在阅读以下演示文稿:
http://www.idt.mdh.se/kurser/DVA201/slides/parallel-4up.pdf
并且作者声称 map 函数非常适合并行性(特别是他支持他在第 3 页或幻灯片 9 和 10 中的主张)。
如果给一个列表的每个值增加 +1 的问题,我可以看到循环遍历列表如何强制要求更改索引值,从而导致潜在的竞争条件问题。但我很好奇 map 函数如何更好地让程序员成功地并行编码。
是因为map是递归定义的吗?那么每个函数调用都可以抛出到不同的线程吗?
希望有人能提供一些细节,谢谢!
【问题讨论】:
-
因为函数
f对输入列表元素的每个应用程序都是独立从任何其他应用程序到任何其他元素的,所以它们都可以独立于彼此,即并行。假设的par_map将分配存储来支持结果列表,并为列表中的每个元素e触发一个新线程的执行,为它提供对需要使用@ 结果更新的位置的引用987654325@。当没有更多活动线程时,map已完成。当然,您也可以让每个线程在 1000es 的块上工作。
标签: scala parallel-processing functional-programming map-function