プロセス間通信
出典: フリー百科事典『ウィキペディア(Wikipedia)』
プロセス間通信(IPC、テンプレート:Lang-en-short)はコンピュータの動作において複数のプロセス間(の複数のスレッド間)でデータをやりとりするための仕組み。通信するプロセスは同一コンピュータ上にある場合と、ネットワークで接続された別のコンピュータ上にある場合がある。IPC技法は、メッセージパッシング、同期、共有メモリ、RPC に分類される。IPC技法のスレッド間の通信の帯域幅とレイテンシは様々であり、やりとりされるデータの種類も様々である。
プロセス群を協調動作させる環境を提供する目的・理由には以下のようなものがある。
- 情報の共有
- 計算の高速化
- モジュール性の向上
- 利便性
- テンプレート:仮リンク
IPCを「スレッド間通信」や「アプリケーション間通信」と呼ぶこともある。
IPCとアドレス空間のコンセプトの組合せは、アドレス空間分離の基盤である[1]。
主なIPC技法
技法 | 提供しているOSや環境 |
---|---|
ファイル | 多くのOS |
シグナル | 多くのOS。WindowsではCのランタイムライブラリでのみ実装しており、IPCとしての利用は推奨していないテンプレート:要出典。 |
メッセージキュー | 多くのOS |
ソケット | 多くのOS |
UNIXドメインソケット | POSIX準拠システム |
パイプ | POSIX準拠システム、Windows |
名前付きパイプ | POSIX準拠システム、Windows |
セマフォ | POSIX準拠システム、Windows |
共有メモリ | POSIX準拠システム、Windows |
メモリマップトファイル | POSIX準拠システム、Windows |
メッセージパッシング (shared nothing) |
MPI パラダイム、Java RMI、CORBA、テンプレート:仮リンク, テンプレート:仮リンク、QNX、その他 |
Binder | Android |
実装例
IPCとして使われているAPIはいくつかある。プラットフォームに依存しない主なAPIの例を挙げる。
- テンプレート:仮リンクと名前付きパイプ
- Common Object Request Broker Architecture (CORBA)
- Freedesktop.orgのD-Bus
- Distributed Computing Environment (DCE)
- メッセージバス (Mbus) - RFC 3259 にて規定
- MCAPI (Multicore Communications API)
- Lightweight Communications and Marshalling (LCM)
- ONC RPC
- UNIXドメインソケット
- XML: XML-RPC や SOAP
- JSON: テンプレート:仮リンク
- Thrift
- TIPCテンプレート:Enlink
- ZeroCの Internet Communications Engine (ICE)
以下は、プラットフォーム固有またはプログラミング言語固有のAPIの例である。
- アップルの Apple event(従来は Interapplication Communications、IAC と呼ばれていた)
- Eneaの LINX - Linux向け(オープンソース)と Enea OSE で動作するバージョンがある。
- CMUによるIPC実装[2]
- Javaの Remote Method Invocation (RMI)
- KDEの Desktop Communications Protocol (DCOP)
- Libt2n - Linux上のC++でのみ動作。複雑なオブジェクトや例外を扱える。
- Machカーネルの Mach ポート
- マイクロソフトの ActiveX、Component Object Model (COM)、Microsoft Transaction Server (COM+)、Distributed Component Object Model (DCOM)、動的データ交換 (DDE)、Object Linking and Embedding (OLE)、テンプレート:仮リンク、名前付きパイプ、テンプレート:仮リンク、テンプレート:仮リンク、テンプレート:仮リンク、テンプレート:仮リンク、.NET Remoting、Windows Communication Foundation (WCF)
- ノベルの SPX
- PHPのセッション
- POSIX: mmap、メッセージキュー、セマフォ、共有メモリ
- RISC OSのメッセージ
- Solaris Doors
- System V: メッセージキュー、セマフォ、共有メモリ
- Distributed Ruby
- DIPC (Distributed Inter-Process Communication) - Linux上で System V 系IPCをネットワークにまで拡張する仕組み
- OpenBinder - BeOSが起源で、最近ではAndroidで使われている。
- Solace Systems の IPC Shared Memory Messaging[3]
- QNXのPPS (Persistant Publish/Subscribe) サービス
- SIMPL (Synchronous Interprocess Messaging Project for Linux) - QNX風IPCをLinuxに実装するプロジェクト
脚注
参考文献
- Stevens, Richard. UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications. Prentice Hall, 1999. ISBN 0-13-081081-9
- U. Ramachandran, M. Solomon, M. Vernon Hardware support for interprocess communication Proceedings of the 14th annual international symposium on Computer architecture. Pittsburgh, Pennsylvania, United States. Pages: 178 - 188. Year of Publication: 1987 ISBN 0-8186-0776-9
- Crovella, M. Bianchini, R. LeBlanc, T. Markatos, E. Wisniewski, R. Using communication-to-computation ratio in parallel program designand performance prediction 1–4 December 1992. pp. 238–245 ISBN 0-8186-3200-3
関連項目
外部リンク
- Linux ipc(5) man page - System V IPC の解説
- Windows IPC
- Beej's Guide to Unix IPC
- Unix Network Programming (Vol 2: Interprocess Communications) by W. Richard Stevens