Fork/Join と Map/Reduce の主な違いは何ですか?
分解と分散の種類 (データと計算) が異なりますか?
主な違いの 1 つは、FJは単一の Java VM で動作するように設計されているように見えるのに対し、MRはマシンの大規模なクラスターで動作するように明示的に設計されていることです。これらは非常に異なるシナリオです。
FJ は、再帰的に見える方法で、タスクをいくつかのサブタスクに分割する機能を提供します。より多くの層、この段階での「フォーク間」通信の可能性、はるかに伝統的なプログラミング。単一のマシンを超えて (少なくとも論文では) 拡張しません。8 コアを活用するのに最適です。
MR は 1 つの大きな分割のみを行い、マッピングされた分割は互いにまったく通信せず、すべてをまとめて削減します。単一層で、縮小するまでスプリット間の通信はなく、非常にスケーラブルです。クラウドのシェアを活用するのに最適です。
Comparing Fork/Join and MapReduceという主題に関する完全な科学論文があります。
このペーパーでは、fork/join、MapReduce、およびハイブリッド アプローチの 3 つの並列パラダイムのパフォーマンス、スケーラビリティ、およびプログラマビリティを比較しています。
基本的に、Java fork/join は起動時の待ち時間が短く、小さな入力 (5MB 未満) には十分に対応できますが、共有メモリの単一ノード アーキテクチャのサイズ制限により、より大きな入力を処理できないことがわかっています。一方、MapReduce にはかなりの起動レイテンシ (数十秒) がありますが、コンピューティング クラスター上のはるかに大きな入力 (>100MB) に対して適切にスケーリングします。
しかし、やる気があれば、他にも読むべきことがたくさんあります。