看起来像clojure will have a fork-join implementation,它看起来像是java的fork join框架的功能包装。
我想知道这些和pmap / preduce之间的区别是什么?
答案 0 :(得分:3)
Fork-join比基于序列的pmap
/ preduce
更通用,并且应该允许对并行性进行更细粒度的控制。这样做的确切API仍然悬而未决。
答案 1 :(得分:2)
通过查看该代码,它们的功能大致相同 - 唯一的区别是pmap
使用在代理线程池上运行的Futures作为其底层原语,而pvmap
使用fork-join。
我无法肯定地说,但我希望在一般情况下哪一个表现更好会成为pmap
的标准实施,除非有足够的权衡取舍都值得。
它看起来(至少现在)fork-join框架只支持向量,所以它不像pmap
那样是半懒惰的。
答案 2 :(得分:2)
这些幻灯片包含一些图表,显示两种方法之间的比较:http://data-sorcery.org/2010/10/23/clojureconj/
答案 3 :(得分:1)
据我所知,一个不同之处在于pmap
只会在给出的任何程度的“厚度”下运行。该函数映射到赋予pmap
的序列的每个成员。如果粒度太小,则在创建和管理太多Future
的开销中会吞噬并行性的潜在好处。
Fork-join允许工作窃取,以便在每个线程上运行多少可以是自适应的。
答案 4 :(得分:1)
pmap或pvmap都不会使我们不必使用正确的块大小。对于我的项目,通常意味着将数据分成块并在每个块上使用map,然后使用pmap并行地映射块。然后减少并变平。