2010-03-29 169 views

回答

31

一个关键区别是F-J似乎被设计为在单个Java虚拟机上工作,而M-R被明确设计为可在大型机器集群上工作。这些是非常不同的情况。

F-J提供了将任务分割成若干子任务的设施,以递归式的方式;更多层次,现阶段“叉间”沟通的可能性,更传统的编程。不会延伸(至少在纸张上)超出一台机器。非常适合您的八核。

M-R只做了一个大的分割,映射的分割根本不在对方之间,然后一起缩小了所有的东西。单层,在减少之前不会进行相互分离的通信,并且可以大规模扩展。非常适合利用您的云份额。

+8

更具体地说,F-J允许工人从彼此的队列中窃取子任务。如果工作线程位于不同的机器上(这样就没有共享内存),这是不可能的。 – finnw 2011-01-21 12:24:57

+2

根据[MapReduce Wikipedia条目](http://en.wikipedia.org/wiki/MapReduce),MR不是必然局限于单层分叉任务。 – 2013-03-07 01:35:07

+0

在Java上下文之外fork/join和mapreduce之间有什么区别? – user2001850 2017-01-15 22:09:48

10

有一个关于这个问题的整个科学论文,Comparing Fork/Join and MapReduce

本文比较了三种并行范例的性能,可伸缩性和可编程性:fork/join,MapReduce和混合方法。他们发现,基本上Java fork/join具有较低的启动延迟并适用于小型输入(< 5MB),但由于共享内存的大小限制,单个节点体系结构无法处理较大的输入。另一方面,MapReduce具有显着的启动延迟(几十秒),但对于计算群集中更大的输入(> 100MB)很好。

但是,如果你想要阅读,还有很多东西需要阅读。

相关问题