Fork/Join和Map/Reduce的区别

54

Fork/Join和Map/Reduce的关键区别是什么?

它们的区别在于分解和分发的方式(数据 vs. 计算)吗?

2个回答

46

一个关键的区别是,F-J 似乎旨在在单个 Java VM 上运行,而 M-R 明确设计为在大型机器群集上运行。这些场景非常不同。

F-J 提供了将任务划分为多个子任务的功能,以递归方式进行;更多层次、在此阶段有可能进行“交叉-分支”通信,更加传统的编程方式。至少在论文中,没有超出单台机器的范围。非常适合利用你的八核。

M-R 只进行一次大分割,映射分割之间完全不进行交流,然后将所有结果一起归纳。只有一个层次,在归纳前没有跨分割的交流,可以进行大规模扩展。非常适合利用云计算资源。


11
具体来说,“F-J”允许工人从彼此的队列中窃取子任务。如果工作线程在不同的机器上(因此没有共享内存),则这是不可能的。 - finnw
2
根据MapReduce维基百科条目所述,M-R并不一定局限于单层分叉任务。 - Tom Crockett
在Java上下文之外,fork/join和mapreduce有什么区别? - user2001850

20

这个主题有一整篇科学论文:比较Fork/Join和MapReduce

该论文比较了三种并行范例的性能、可伸缩性和可编程性:fork/join、MapReduce和混合方法。

他们发现,Java的fork/join具有低启动延迟,并且对于小输入(<5MB)具有良好的扩展性,但由于共享内存单节点结构的大小限制,无法处理更大的输入。另一方面,在计算集群上,MapReduce的启动延迟显著(十秒左右),但对于更大的输入(>100MB)具有良好的扩展性。

如果您感兴趣,还有很多内容可以阅读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接