分散プログラミングとは何ですか?
分散プログラミングは、並列プログラミングまたは並列計算の一形態です。 並列プログラミングでは、特定の問題(明日の天気予報など)を同時に処理するコンピューターとコンピューター内のコンピューティングユニットを使用します。 コンピューティングユニットは、非常に近くに配置して調整することも、離れて配置することもできます。 コンピューティングユニットが離れている場合、分散プログラミングと呼ばれます。 このようなシナリオでは、非常に多くの場合、コンピューティングユニットが互いに異なり、オペレーティングシステムとネットワークのセットアップも異なるため、コンピューティングアクティビティのプログラミングが特に困難になります。
問題を分散的に解決する場合、プログラムの一部を異なるコンピューティングユニットで実行できるように、プログラムを分割する必要があります。 これらの部分は、多くの場合「プロセス」と呼ばれます。 プロセスは同時に実行されますが、入力と結果を相互に通信する必要があります。 Intelで実行されている部分とSUNで実行されている部分など、プロセスが異なるハードウェアで実行されている場合、プログラムを別々にコンパイルおよび最適化する必要があります。
十分に難しい問題を解決する1つの方法は、入力部分を分割し、同じアルゴリズム、問題解決のためのルールまたはステップのセットを使用して、異なるコンピューティングユニットを異なる部分で動作させることです。 たとえば、10,000ペアのゲノムをクラックするには、最初の1,000ペアを最初のコンピューティングユニットに割り当て、2番目の1,000ペアを2番目のコンピューティングユニットに割り当てるなど、すべて同じアルゴリズムを使用します。 分散プログラミングでは、1つの利点は、異なるコンピューティングユニットが異なるアルゴリズムを実行して同じ問題を解決できるため、非常に優れたソリューションが得られることです。 これは、一部の人が境界線をつなぎ合わせ、他の人が特定の色のピースを組み立てるというジグソーパズルを解くようなものです。
分散コンピューティングプロセスの調整は、特に難しいタスクです。 一部のコンピューティングユニットは、失敗したり、他の作業を処理するために中断されたりする場合があります。 入力または計算の結果を含むメッセージは、宛先に到達できない場合があります。 プログラムが単純な方法で記述されている場合、コンピューティングユニットまたは一部のメッセージが失われると、コンピューターセット全体がハングする可能性があります。
分散プログラミングでは、1つのプロセスが制御プロセスであり、本質的に他のプロセスによって作業が行われるか、すべてのプロセスが「マスター」プロセスなしでピアツーピアで動作します。 分散プログラミングで試行される問題の例には、石油などのリソースの地質データの分析、タンパク質や生体分子のモデリング、コード化されたメッセージのクラッキング、軍事シミュレーションなどがあります。 地球が受信した無線メッセージから地球外の知的生命体を検索するSETIプロジェクトは、おそらく最も有名な例の1つです。