プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

共有メモリ方式であれば各プロセスは,直接,共有メモリを参照したり書き換えたりできるんで,プログラミングは楽です.その代わり,排他書き込み処理あるいは,同期処理といったプログラマからは直接見えないオーバーヘッドが大きくなりがちです.


メッセージパッシング方式は,各プロセスが全データを一部ずつ所有しています.あるプロセスが他のプロセスが所有しているデータが必要なときは,明示的ににデータの要求を出して,受け取るといった操作をします.プログラマの負担は増えますが,プロセス間通信の量や頻度を細かく制御できるので,凝った最適化が可能です.
    • good
    • 0

並列処理の場合、計算の主体、例えばプロセスやスレッドあるいはより直感的にはプロセッサ、が複数あって、その間で通信、つまりデータのやり取りをして計算を並列に進めます。



で、このデータのやり取りが「通信」と呼ばれ、並列処理ではほとんどの場合でなんらかの通信が必要にります。逆に言えば、通信しない部分は逐次処理(ただしそれぞれのプロセスが計算をすれば並列処理になる)と全く同じです。

共有メモリというのは、2つのプロセス(スレッド)から同じメモリの内容(アドレスは違うかもしれない)が見えるような仕組み(多くはハードウェアによる。まれにソフトウェアで実現されている場合もある)になっていて、このメモリに一方が書き込んで、他方が読み込めば、データの受け渡しが実現できることになります。

一方、メッセージパッシング方式では、一方のプロセスではメッセージ(データ)を別のプロセスに送信する、という関数を呼び、他方のプロセスではデータを受信する関数を呼ぶことで、データの受け渡しを実現しています。メッセージパッシングではなんらかのネットワークを経由してメッセージが送られます。

他にも No.1 さんのおっしゃるように、同期とか排他制御とかいろいろとありますが、これらは書き出すときりがないのでこの辺りで止めておきます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!