プロセス間通信の種類
- ネットワーク上のマシン間で行う通信
- ローカルマシン内で行う通信
ネットワーク上のマシン間で行う通信
- ネットワークDDE(Dynamic Data Excange)
- NetBIOS (Network Basic Input/Output System)
- RPC(Remote Procedure Call)
- Windowsソケット
- 名前付きパイプ
- メールスロット
ローカルマシン内で行う通信
- OLE
- メモリマップドファイル
- 一般的な、Win32 のプログラミングに関する資料では、プロセス間でメモリを 共有するときにはメモリマップドファイルを使用するのが最良の方法とされています。
- WM_COPYDATAメッセージ
- 送信できるデータは32ビット変数 LPARAM, WPARAM (Win16 では LPARAM は32ビット、WPARAM は16ビット) の 二つだけです。
- メモリハンドルを送信すれば、メモリの共有ができそうですが、 32ビットアプリケーションは別々のメモリ空間で動作するために動作しません。
- メモリ共有
- 少量のデータを共有するときは、この方法で行った方が効率よく処理を行うことが できますが、大量のデータを共有するときは、前述のメモリマップドファイルの方が 有効です。
セマフォ/ミューテックス
共有メモリにアクセスするときなど、複数のプロセスやスレッドが同期をとりながら 動作しなければならないとき、同期オブジェクトを利用します。
I/Oやプロセスやスレッドの終了によって発生するイベントを待つことによって、 同期をとれます。スレッドやプロセスはそれぞれが非同期に動作しますが、システム リソースの数は限られるため、それぞれのプロセスやスレッドは競合しないように システムリソースの利用を待ち合わせます。
ミューテックス | リソースの排他制御を行う |
セマフォ | リソースにアクセスできるスレッドまたはプロセスの数を制限して排他制御を行う。セマフォカウンタの最大値を1にするとミューテックスと同一の動作になる |
クリティカルセクション | リソース(コード)の排他制御を行う。プロセス間で利用できない。ミューテックスより速度的に有利 |
イベント | アプリケーションが意図的にイベントのON/OFFを行う。Win32 API SetEvent(), ResetEvent() で行う |
ネタ元
- プロセス間で協調して動作するアプリケーションの使い方がわかりたい(http://www7a.biglobe.ne.jp/~tsuneoka/win32sub/3.html)