私が間違っている場合は修正してください、しかし、私はこれが以前ここで尋ねられていないことに驚いています...
それは非常に単純な違いです。共有メモリモデルでは、複数のワーカーがすべて同じデータを操作します。これにより、並列プログラミングで一般的な並行性の問題が多く発生します。
メッセージパッシングシステムにより、ワーカーはメッセージングシステムを通じて通信できます。メッセージはすべての人を分離するので、労働者は互いのデータを変更できません。
類推すると、プロジェクトでチームと一緒に作業しているとしましょう。 1つのモデルでは、すべての論文とデータがレイアウトされた、テーブルの周りに全員が集まっています。私たちはテーブルの上のものを変えることによってのみコミュニケーションをとることができます。一度に同じデータを操作しようとしないように注意する必要があります。そうしないと、混乱を招き、物事が混乱してしまいます。
メッセージパッシングモデルでは、私たち全員が自分の机に座って机に座っています。必要に応じて、紙を「メッセージ」として他の人に渡すことができ、その労働者はそれを使って自分のやりたいことができるようになります。目の前にあるものにしかアクセスできないので、合計の途中で誰かが手を伸ばして番号の1つを変更することを心配する必要はありません。
わかりました、ばかげたアナロジー!
共有メモリは、コンピュータ内でメモリ速度で実行できるため、通信の最大速度と利便性を実現します。メッセージ受け渡しシステムは通常システムコールを使用して実装されるため、共有メモリはメッセージ受け渡しよりも高速であるため、カーネルの介入というより時間のかかるタスクが必要です。
メッセージパッシングモデル(Erlangなど)には共有状態がありません。すべての同期と通信はメッセージの交換によって行われます。共有メモリモデルは、セマフォなどで保護されている共有メモリブロックの読み取り/書き込みによって通信します。
メッセージの受け渡しはデータを正当化するのに適した方法ですが、通信を高速化するために応答時間が遅くなりますが、共有メモリモデルデータは1つのメモリから抽出され、ワーキンググループは同じデータに対して異なる作業を行うことができます
メッセージ受け渡しシステムのスループットは、高速応答時間を必要とする一部のアプリケーションには低すぎる場合がありますが、より高速またはリアルタイムの処理が必要な場合は、共有メモリシステムを使用できます。
メッセージ渡しモデルと共有メモリモデルのの違いを求めており、それらのパフォーマンス、情報交換の方法、および同時実行性の問題に関して既に良い回答を得ていますが、それを指摘したい:
(特定の条件下で)計算可能性に関して、それらの間にはno基本的な違いがあります。
基礎となるメッセージパッシングシステムで共有メモリをシミュレートできます。これにより、共有メモリモデルを、非同期分散メッセージパッシングシステムのアルゴリズムを設計するための高レベル言語として表示できます。
特に、この論文 ABD @ JACM'95 は、
少なくとも大部分のプロセッサに障害がなく、接続されたままであれば、アトミックなシングルライター(およびマルチライター)マルチリーダーレジスタに基づくウェイトフリーアルゴリズムは、メッセージパッシングシステムで自動的にエミュレートできます。これらのエミュレーションによって導入されるオーバーヘッドは、システム内のプロセッサ数の多項式です。
メッセージパッシングと共有メモリを区別するには、次の5つのことを考慮してください。
すでに与えられた答えは参考になりますが、ほとんどは共有メモリはメッセージの受け渡しよりも速いという考えに言及しています。これは実際にはかなり単純な文です。何か実用的なことを行う実際のシステムでは、共有メモリアクセスには、個別のスレッドからのアクセスを制御するロックメカニズムが必要です。これは、ほとんどの場合、メッセージパッシングを使用して同じシステムを実装するよりも遅くなります。