web-dev-qa-db-ja.com

メッセージパッシングモデルと共有メモリ同時実行モデルの違いは何ですか?

私が間違っている場合は修正してください、しかし、私はこれが以前ここで尋ねられていないことに驚いています...

43
blank

それは非常に単純な違いです。共有メモリモデルでは、複数のワーカーがすべて同じデータを操作します。これにより、並列プログラミングで一般的な並行性の問題が多く発生します。

メッセージパッシングシステムにより、ワーカーはメッセージングシステムを通じて通信できます。メッセージはすべての人を分離するので、労働者は互いのデータを変更できません。

類推すると、プロジェクトでチームと一緒に作業しているとしましょう。 1つのモデルでは、すべての論文とデータがレイアウトされた、テーブルの周りに全員が集まっています。私たちはテーブルの上のものを変えることによってのみコミュニケーションをとることができます。一度に同じデータを操作しようとしないように注意する必要があります。そうしないと、混乱を招き、物事が混乱してしまいます。

メッセージパッシングモデルでは、私たち全員が自分の机に座って机に座っています。必要に応じて、紙を「メッセージ」として他の人に渡すことができ、その労働者はそれを使って自分のやりたいことができるようになります。目の前にあるものにしかアクセスできないので、合計の途中で誰かが手を伸ばして番号の1つを変更することを心配する必要はありません。

わかりました、ばかげたアナロジー!

96
Chris Pitman
  1. 共有メモリモデルでは、メモリは、データの読み取りと書き込みによって情報を交換できる協調プロセスによって共有されますが、メッセージパッシングでは、協調プロセス間で交換されるメッセージによって通信が行われます。
  2. 共有メモリはプロセスを同時に実行するのに役立ちますが、メッセージの受け渡しはできません。
  3. メッセージパッシング機能には、送信(メッセージ)と受信(メッセージ)の2つの操作があります。プロセスのサイズが固定または可変です。
  4. 競合を回避する必要がないため、メッセージの受け渡しは少量のデータの交換に役立ちます。メッセージの受け渡しも、プロセス間通信の共有メモリよりも実装が簡単です。
  5. 共有メモリシステムでは、システムコールは共有メモリ領域を確立するためにのみ必要です。共有メモリが確立されると、すべてのアクセスはルーチンメモリアクセスとして扱われ、カーネルからの支援は必要ありません。

もっと早く

共有メモリは、コンピュータ内でメモリ速度で実行できるため、通信の最大速度と利便性を実現します。メッセージ受け渡しシステムは通常システムコールを使用して実装されるため、共有メモリはメッセージ受け渡しよりも高速であるため、カーネルの介入というより時間のかかるタスクが必要です。

17
Farah Nazifa

メッセージパッシングモデル(Erlangなど)には共有状態がありません。すべての同期と通信はメッセージの交換によって行われます。共有メモリモデルは、セマフォなどで保護されている共有メモリブロックの読み取り/書き込みによって通信します。

10
JesperE

メッセージの受け渡しはデータを正当化するのに適した方法ですが、通信を高速化するために応答時間が遅くなりますが、共有メモリモデルデータは1つのメモリから抽出され、ワー​​キンググループは同じデータに対して異なる作業を行うことができます

メッセージ受け渡しシステムのスループットは、高速応答時間を必要とする一部のアプリケーションには低すぎる場合がありますが、より高速またはリアルタイムの処理が必要な場合は、共有メモリシステムを使用できます。

3
juned ahmed

メッセージ渡しモデルと共有メモリモデルのの違いを求めており、それらのパフォーマンス、情報交換の方法、および同時実行性の問題に関して既に良い回答を得ていますが、それを指摘したい:

(特定の条件下で)計算可能性に関して、それらの間にはno基本的な違いがあります。

基礎となるメッセージパッシングシステムで共有メモリをシミュレートできます。これにより、共有メモリモデルを、非同期分散メッセージパッシングシステムのアルゴリズムを設計するための高レベル言語として表示できます。

特に、この論文 ABD @ JACM'95 は、

少なくとも大部分のプロセッサに障害がなく、接続されたままであれば、アトミックなシングルライター(およびマルチライター)マルチリーダーレジスタに基づくウェイトフリーアルゴリズムは、メッセージパッシングシステムで自動的にエミュレートできます。これらのエミュレーションによって導入されるオーバーヘッドは、システム内のプロセッサ数の多項式です。

2
hengxin

メッセージパッシングと共有メモリを区別するには、次の5つのことを考慮してください。

  1. 通信:-メッセージの受け渡しの場合、通信は、通信先のプロセスなどのプログラマーに依存します。ただし、共有メモリの場合、通信は自動的に行われます。
  2. データ分布:-m.p(手動)s.m(自動)
  3. H/Wサポート:-m.p(simple)s.m(プロセス間を自動的に検出するにはインテリジェントである必要があるため、広範囲に及ぶ)
  4. 正しさ:-m.p(難しい)s.m(それほど難しくない)
  5. パフォーマンス:-m.p(難しい)s.m(非常に難しい) `
1

すでに与えられた答えは参考になりますが、ほとんどは共有メモリはメッセージの受け渡しよりも速いという考えに言及しています。これは実際にはかなり単純な文です。何か実用的なことを行う実際のシステムでは、共有メモリアクセスには、個別のスレッドからのアクセスを制御するロックメカニズムが必要です。これは、ほとんどの場合、メッセージパッシングを使用して同じシステムを実装するよりも遅くなります。

1
John Vincent