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

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

💡 プロセスという「個室」同士をつなぐ連絡手段いろいろ
📌 このページのポイント
プロセス間通信(IPC)の主な方式 プロセスA プロセスB パイプ 一方向のデータストリーム データ → 共有メモリ 同じメモリ領域を共有 共有領域 高速 メッセージキュー 非同期メッセージ送受信 M1 M2 M3 → 順番に取り出し ソケット ネットワーク越しにも通信可 双方向通信
プロセス間通信(IPC)のイメージ
ひよこ ひよこ

プロセス間通信って何なの?

ペンギン先生 ペンギン先生

プロセスはそれぞれ独立したメモリ空間を持っているから、普通はお互いのデータが見えないんだ。IPCはそんなプロセス同士がデータをやり取りするための仕組みの総称だよ。マンションの各部屋が壁で仕切られているけど、郵便受けや内線電話で連絡できるようなイメージだね。

ひよこ ひよこ

どんな方法があるの?

ペンギン先生 ペンギン先生

代表的なのはパイプ、共有メモリ、メッセージキューソケットだよ。パイプコマンドラインの `|` でおなじみの一方向データ転送。共有メモリは同じメモリ領域を複数プロセスで共有する方式。メッセージキューはメッセージを順番に送受信する仕組みだね。

ひよこ ひよこ

どれを使えばいいか迷いそう...。

ペンギン先生 ペンギン先生

用途によって使い分けるんだよ。大量データを高速にやり取りしたいなら共有メモリ、シンプルにコマンドの出力を次のコマンドに渡すならパイプネットワーク越しにもやり取りしたいならソケット、非同期にメッセージを送りたいならメッセージキューが向いているよ。

ひよこ ひよこ

共有メモリが一番速いなら、全部それでよくない?

ペンギン先生 ペンギン先生

速いけど落とし穴があるんだ。複数のプロセスが同時に同じメモリを読み書きするとデータが壊れる可能性があるから、セマフォミューテックス排他制御が必要になる。実装が複雑になるし、バグの温床にもなりやすいよ。

ひよこ ひよこ

最近のアプリでもIPCって使われているの?

ペンギン先生 ペンギン先生

めちゃくちゃ使われているよ。たとえばChromeブラウザはタブごとに別プロセスで動いていて、プロセス間の通信にIPCを活用しているんだ。Androidのサービス間通信(Binder)も高度なIPC機構だし、DockerコンテナマイクロサービスgRPC通信も広義にはIPCの一種と言えるよ。UNIXドメインソケットなんかは、ローカル通信に特化していてTCPソケットより高速なので、データベースとの接続にもよく使われているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「IPC」って出てきたら「プロセス同士がデータをやり取りする仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Inter-Process Communication」 = プロセス間通信
💬 inter(間の)+ process(プロセス)+ communication(通信)で、プロセスとプロセスの間の通信手段という意味だよ
← 用語集にもどる