【ぷろせすかんつうしん】

プロセス間通信(IPC) とは?

最終更新:
💡 別々に動くプログラムをつなぐ、連絡手段いろいろ

プロセス同士がデータをやり取りするための仕組みの総称。パイプ、共有メモリ、メッセージキュー、ソケットなどを、通信範囲やデータの扱いに合わせて使う。

📌 このページのポイント
プロセス同士の連絡手段パイプバイトの列を渡す例:Linuxのパイプメッセージキューメッセージを渡す順序の規則も確認共有メモリ同じ領域を使うアクセスを同期ソケット通信の窓口を使うローカル / ネットワーク方式とOSに合わせて、連絡手段を選ぶ
4つの代表例。Linuxのパイプは一方向ですが、Windowsの名前付きパイプは双方向にも設定できます。速度や順序を一律には決められません。
ひよこ ひよこ
別のプロセスとは、そのまま話せないの?
ペンギン先生 ペンギン先生
プロセスは通常、それぞれ分かれたメモリ空間を使うよ。データを渡したり、一部のメモリを共有したりするための仕組みがIPCなんだ。マンションの別々の部屋が、郵便や内線電話で連絡するイメージだね。
ひよこ ひよこ
パイプとメッセージキューは、どう違うの?
ペンギン先生 ペンギン先生
Linuxのパイプは、書き込み側から読み取り側へバイトの列を渡すよ。メッセージ単位の区切りは持たない。一方、メッセージキューはメッセージ単位で受け渡す。取り出す順序にも規則があり、POSIXメッセージキューでは優先度の高いものから届くんだ。
ひよこ ひよこ
パイプは、全部一方向なの?
ペンギン先生 ペンギン先生
Linuxのパイプは一方向だけれど、Windowsの名前付きパイプには双方向の設定もあるよ。IPCは多くの仕組みの総称なので、名前だけで決めつけず、OSと使うAPIの仕様を確認しよう。
ひよこ ひよこ
共有メモリがあれば、それが一番いい?
ペンギン先生 ペンギン先生
同じメモリ領域を使う方式だけれど、速度だけで選ぶのは難しいよ。複数のプロセスが同時に変更する場合などは、セマフォなどで読み書きのタイミングをそろえる必要がある。データ量、アクセスの仕方、実装や管理のしやすさも考えよう。
ひよこ ひよこ
ソケットは、ネットワーク専用なの?
ペンギン先生 ペンギン先生
同じコンピューター内で使うUnixドメインソケットもあるよ。ネットワーク越しの通信にはTCP/IPなどのソケットを使う。通信する範囲やデータの区切り、接続方法に合わせて選ぶんだ。「全てのソケットが同じ動作や速度」とは限らないよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「IPC」って出てきたら「別々のプロセス同士が連絡し、データをやり取りする仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Inter-Process Communication」 = プロセス間の通信
💬 Interは「〜の間」、Processは実行中のプログラム。別々に動くプロセスをつなぐ方法のまとめ名だよ

参考資料

← 用語集にもどる