Fork / Join和Map / Reduce之间的主要区别是什么?
它们的分解和分布类型(数据与计算)是否不同?
答案 0 :(得分:35)
一个关键的区别是F-J似乎被设计为在单个Java VM上工作,而M-R明确地设计为在大型机器集群上工作。这些情况非常不同。
F-J提供了以递归方式将任务划分为多个子任务的工具;更多层次,现阶段“跨叉”通信的可能性,更传统的编程。不延伸(至少在论文中)超出单个机器。非常适合利用你的八核。
M-R只进行一次大的拆分,映射的拆分根本不相互通信,然后将所有内容一起减少。单层,在减少之前没有交叉间通信,并且可以大规模扩展。非常适合利用您的云份额。
答案 1 :(得分:12)
关于这个问题有一篇完整的科学论文,Comparing Fork/Join and MapReduce。
本文比较了三种并行范例的性能,可伸缩性和可编程性:fork / join,MapReduce和混合方法。
他们发现基本上Java fork / join具有低启动延迟并且适用于小输入(<5MB),但由于共享内存的大小限制,它无法处理更大的输入, 单节点架构。另一方面,MapReduce具有显着的启动延迟(几十秒),但对于计算群集上的更大输入(> 100MB)可以很好地扩展。
但是,如果你愿意的话还有很多东西要读。