• ベストアンサー

共有メモリ方式とメッセージパッシング方式

並列処理をプログラムで記述する方法について調べていて、共有メモリ方式とメッセージパッシング方式というものを見つけました。ただ、この2つについて何がどう違うのかがうまく理解できません。ぜひおしえてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

共有メモリ方式であれば各プロセスは,直接,共有メモリを参照したり書き換えたりできるんで,プログラミングは楽です.その代わり,排他書き込み処理あるいは,同期処理といったプログラマからは直接見えないオーバーヘッドが大きくなりがちです. メッセージパッシング方式は,各プロセスが全データを一部ずつ所有しています.あるプロセスが他のプロセスが所有しているデータが必要なときは,明示的ににデータの要求を出して,受け取るといった操作をします.プログラマの負担は増えますが,プロセス間通信の量や頻度を細かく制御できるので,凝った最適化が可能です.

その他の回答 (1)

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.2

並列処理の場合、計算の主体、例えばプロセスやスレッドあるいはより直感的にはプロセッサ、が複数あって、その間で通信、つまりデータのやり取りをして計算を並列に進めます。 で、このデータのやり取りが「通信」と呼ばれ、並列処理ではほとんどの場合でなんらかの通信が必要にります。逆に言えば、通信しない部分は逐次処理(ただしそれぞれのプロセスが計算をすれば並列処理になる)と全く同じです。 共有メモリというのは、2つのプロセス(スレッド)から同じメモリの内容(アドレスは違うかもしれない)が見えるような仕組み(多くはハードウェアによる。まれにソフトウェアで実現されている場合もある)になっていて、このメモリに一方が書き込んで、他方が読み込めば、データの受け渡しが実現できることになります。 一方、メッセージパッシング方式では、一方のプロセスではメッセージ(データ)を別のプロセスに送信する、という関数を呼び、他方のプロセスではデータを受信する関数を呼ぶことで、データの受け渡しを実現しています。メッセージパッシングではなんらかのネットワークを経由してメッセージが送られます。 他にも No.1 さんのおっしゃるように、同期とか排他制御とかいろいろとありますが、これらは書き出すときりがないのでこの辺りで止めておきます。

関連するQ&A