プロセス間通信(IPC)
独立したプロセス間でデータをやり取り・同期するための機構の総称。共有資源を扱う並列処理(parallel-computing)と密接に関わる。
主な手段
- ファイル: 最も素朴な共有。
- シグナル(linux signal): 非同期通知。
- メッセージキュー: OSごとに実装が異なる。
- ソケット: ネットワーク経由を含む。WebSocket もこの系列。
- unix pipe: シェルの
ls | grepのようなパイプライン。伝統的にコピーが発生し遅いが、Linux のspliceシステムコールと hugepage を併用するとコピーなしで転送でき高速化できる。 - セマフォ: 共有資源へのアクセスを制御する同期プリミティブ(デザインパターン的に使う)。
- 共有メモリ / メモリマップドファイル: mmap でメモリ上にファイルとして共有。
- メッセージパッシング: MPI などのインターフェース。通信方法は規定せず(デフォルトはソケット)。
メッセージング指向のモデル
- MPSC (Multi-producer, single consumer): チャネルベースのメッセージングモデル。rust-lang では
std::sync::mpscや tokio のmpscで利用する。送信機(tx)/受信機(rx)でデータを受け渡す。 - 上位の RPC として gRPC があり、k8s と組み合わせた分散処理でも使われる。
関連トピック
- カーネル側の機構は operating-system-kernel を参照。
- 分散ノード間の合意は distributed-consensus-raft。