
コンピュータサイエンスにおいて、プロセス間通信(IPC)は、プロセス間通信とも綴られ、プロセスが共有データを管理するオペレーティングシステムによって提供されるメカニズムです。通常、アプリケーションはクライアントとサーバーに分類されるIPCを使用できます。クライアントはデータを要求し、サーバーはクライアントの要求に応答します。[1]多くのアプリケーションは、分散コンピューティングでよく見られるように、クライアントとサーバーの両方です。
IPCは、カーネルが提供する機能の数を減らすマイクロカーネルとナノカーネルの設計プロセスにとって非常に重要です。これらの機能は、IPCを介してサーバーと通信することで取得され、通常のモノリシックカーネルと比較して通信が大幅に増加します。IPCインターフェイスは通常、可変の分析フレームワーク構造を包含します。これらのプロセスは、IPCモデルが依存するマルチベクトルプロトコル間の互換性を保証します。[2]
IPC メカニズムは同期または非同期のいずれかです。同期プリミティブは、非同期 IPC メカニズムで同期動作を行うために使用できます。
デメリット
2つのプロセスからのデータをマージすると、単一のスレッドで同じデータを処理する場合と比べて、プロセス間通信や同期などのオーバーヘッドにより、2桁以上も大幅に高いコストがかかる可能性があります。[3] [4] [5]
アプローチ
IPCに対するさまざまなアプローチは、パフォーマンス、モジュール性、ネットワーク帯域幅や遅延などのシステム状況など、さまざまなソフトウェア要件に合わせて調整されてきました。[1]
アプリケーション
リモート プロシージャ コール インターフェイス
- Javaのリモート メソッド呼び出し(RMI)
- ONC RPC
- XML-RPCまたはSOAP
- JSON-RPC
- メッセージ バス (Mbus) (RFC 3259 で指定) ( M-Busと混同しないでください)
- .NET リモート処理
- GRPC とは
プラットフォーム通信スタック
以下は、IPC メカニズムを利用しながらも、IPC 自体は実装していないメッセージングおよび情報システムです。
- KDEのデスクトップ通信プロトコル(DCOP) – D-Bus によって非推奨になりました
- Dバス
- OpenWrtはubusマイクロバスアーキテクチャを採用している
- MCAPIマルチコア通信 API
- SIMPL Linux用同期プロセス間メッセージング プロジェクト(SIMPL)
- 9P (プラン 9 ファイルシステム プロトコル)
- 分散コンピューティング環境(DCE)
- 倹約
- ZeroCのインターネット通信エンジン(ICE)
- ØMQ
- Enduro/Xミドルウェア
- 闇4
- Enlightenment_(ソフトウェア) E16 は IPC として eesh を使用します
オペレーティング システム通信スタック
以下は、プラットフォームまたはプログラミング言語固有の API です。
- Apple ComputerのApple イベント(以前は Interapplication Communications (IAC) として知られていました)
- ARexxポート
- Enea のLinux 用 LINX (オープンソース) とOSEの各種 DSP および汎用プロセッサ
- MachカーネルのMachポート
- MicrosoftのActiveX、コンポーネント オブジェクト モデル(COM)、Microsoft Transaction Server ( COM+ )、分散コンポーネント オブジェクト モデル(DCOM)、動的データ交換(DDE)、オブジェクトのリンクと埋め込み(OLE)、匿名パイプ、名前付きパイプ、ローカル プロシージャ コール、メールスロット、メッセージ ループ、MSRPC、.NET リモート処理、およびWindows Communication Foundation (WCF)
- NovellのSPX
- POSIX mmap、メッセージキュー、セマフォ、[7]、共有メモリ
- RISC OSのメッセージ
- ソラリス ドア
- System Vのメッセージキュー、セマフォ、共有メモリ
- Linux 透過的プロセス間通信 (TIPC)
- OpenBinderバインダーを開く
- QNXの PPS (Persistent Publish/Subscribe) サービス
分散オブジェクトモデル
以下は、IPC を使用するが、それ自体は IPC を実装していないプラットフォームまたはプログラミング言語固有の API です。
- Linux のみのC++用Libt2n は、複雑なオブジェクトと例外を処理します。
- PHPのセッション
- 分散Ruby
- 共通オブジェクトリクエストブローカーアーキテクチャ(CORBA)
- Electronの非同期IPCは、メインプロセスとレンダラープロセス間でJSONオブジェクトを共有する[8]
参照
参考文献
- スティーブンス、リチャード。UNIXネットワーク プログラミング、第 2 巻、第 2 版: プロセス間通信。Prentice Hall、1999 年。ISBN 0-13-081081-9
- U. Ramachandran、M. Solomon、M. Vernonプロセス間通信のハードウェア サポートコンピュータ アーキテクチャに関する第 14 回国際シンポジウムの議事録。米国ペンシルベニア州ピッツバーグ。ページ: 178 - 188。発行年: 1987 ISBN 0-8186-0776-9
- Crovella, M. Bianchini, R. LeBlanc, T. Markatos, E. Wisniewski, R.並列プログラム設計とパフォーマンス予測における通信対計算比率の使用1992 年 12 月 1 ~ 4 日。pp. 238 ~ 245 ISBN 0-8186-3200-3
- ^ ab 「プロセス間通信」。Microsoft。
- ^ Camurati, P (1993). 「システムレベル設計のためのプロセス間通信」。ハードウェア/ソフトウェア協調設計に関する国際ワークショップ。
- ^ オペレーティングシステムの概念。ISBN 978-0470128725。
- ^ コンピュータの構成と設計 MIPS 版: ハードウェア/ソフトウェア インターフェイス (コンピュータ アーキテクチャと設計の Morgan Kaufmann シリーズ)。Morgan Kaufmann。ISBN 978-0124077263。
- ^ 並列プログラミング: ネットワークワークステーションと並列コンピュータを使用したテクニックとアプリケーション。ピアソン。ISBN 978-0131405639。
- ^ 「Windows/WSL Interop with AF_UNIX」。Microsoft。2018年2月7日。 2018年5月25日閲覧。
- ^ 「並行プログラミング - プロセス間の通信」
- ^ "IpcMain | Electron".
外部リンク
- System V IPC を説明する Linux ipc(5) マニュアルページ
- Windows の IPC
- Qtを使用してIPCが利用可能
- Unix ネットワーク プログラミング (第 2 巻: プロセス間通信) W. Richard Stevens 著
- C におけるプロセス間通信とパイプ
- DIPC、分散システム V IPC
