Fork / Join和Map / Reduce之间的区别

Fork / Join和Map / Reduce之间的主要区别是什么?

它们在分解和分布(数据还是计算)方面有所不同?

一个关键的区别是, FJ似乎被devise为在单个Java虚拟机上工作,而MR被明确地devise为在大型机器集群上工作。 这些是非常不同的情况。

FJ提供了将任务划分为多个子任务的工具, 更多的层次,在这个阶段“叉间”沟通的可能性,更传统的编程。 不能扩展(至less在纸张上)超过一台机器。 非常适合您的八核。

MR只做了一个大的分裂,被映射的分裂根本不在彼此之间,然后一起缩减所有的事情。 一个层次,直到减less,没有相互分裂的沟通,并且可以大规模扩展。 非常适合利用您的云份额。

有一个关于这个问题的完整的科学论文, 比较叉/join和MapReduce 。

本文比较了三种并行模式的性能,可伸缩性和可编程性:fork / join,MapReduce和混合方法。

他们发现,基本上,Java fork / join具有较低的启动延迟,并且适用于小型input(<5MB),但由于共享内存,单节点体系结构的大小限制,无法处理较大的input。 另一方面,MapReduce具有相当大的启动延迟(几十秒),但对于计算集群中的更大input(> 100MB)则可以很好地扩展。

但是,如果你愿意的话,还有更多需要阅读的地方。