知識マップ: Windowsのプロセス間通信をどう選ぶか ── 名前付きパイプ / TCP / gRPC / 共有メモリ / COM 判断表
記事「Windowsのプロセス間通信をどう選ぶか ── 名前付きパイプ / TCP / gRPC / 共有メモリ / COM 判断表」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsのプロセス間通信は、同一マシン内の要求応答であれば名前付きパイプが第一候補になり、OS標準のアクセス制御と統合されている一方でパイプ名の占有(スクワッティング)という固有のリスクを抱える。マシンを越える要件や言語混在が見えている場合はローカルTCPかgRPCを選び、TCPは自前のフレーミング設計が必須になる一方、サービスや呼び出しの種類が増えて自前プロトコルの維持が負担になったらgRPCが有効で、.NET 8以降は名前付きパイプをトランスポートに使える。大容量・高頻度のデータは共有メモリ(メモリマップトファイル)が最速だが同期を提供しないため、制御は名前付きパイプ、データは共有メモリという2チャネル構成に分けるのが定石であり、32bit/64bitブリッジではCOMまたは名前付きパイプが選択肢になる。
flowchart LR
accTitle: WindowsのプロセスIPC選定の知識マップ
accDescr: 同一マシン内の要求応答には名前付きパイプ、マシン越えや自前プロトコルの維持負担にはローカルTCPとgRPC、大容量高頻度データには共有メモリ、32bit/64bitブリッジにはCOMや名前付きパイプという使い分けと、それぞれが抱える設計課題の関係を示す図
ipc["プロセス間通信(IPC)"]
named_pipe["名前付きパイプ"]
request_response_ipc["同一マシン内の要求応答通信"]
local_tcp["ローカルTCP"]
cross_machine_ipc_need["マシンをまたぐ通信の必要性"]
grpc["gRPC"]
message_framing["フレーミング(メッセージ境界の決定)"]
growing_protocol_complexity["サービス・メッセージ増加による自前プロトコル維持負担"]
small_scale_tool_ipc["小規模なツール間通信(コマンド数個)"]
memory_mapped_file["ファイルマッピング(メモリマップトファイル)"]
high_throughput_data_transfer["大容量・高頻度データ転送"]
control_data_plane_separation["制御面とデータ面の分離(2チャネル構成)"]
com["COM(コンポーネントオブジェクトモデル)"]
bitness_bridge["32bit/64bitブリッジ"]
pipe_security["PipeSecurity(名前付きパイプのACL)"]
pipe_name_squatting["パイプ名の占有(スクワッティング)"]
file_based_integration["ファイル連携"]
loosely_coupled_batch_integration["疎結合・非同期のバッチ連携"]
windows_service["Windowsサービス"]
named_pipe -->|"推奨される対応"| request_response_ipc
local_tcp -->|"推奨される対応"| cross_machine_ipc_need
grpc -->|"推奨される対応"| cross_machine_ipc_need
local_tcp -->|"前提とする"| message_framing
grpc -.->|"利用する"| named_pipe
grpc -->|"推奨される対応"| growing_protocol_complexity
named_pipe -->|"推奨される対応"| small_scale_tool_ipc
grpc -->|"用いるのは非推奨"| small_scale_tool_ipc
memory_mapped_file -->|"推奨される対応"| high_throughput_data_transfer
memory_mapped_file -.->|"前提とする"| control_data_plane_separation
control_data_plane_separation -.->|"利用する"| named_pipe
control_data_plane_separation -.->|"利用する"| memory_mapped_file
com -->|"推奨される対応"| bitness_bridge
named_pipe -.->|"推奨される対応"| bitness_bridge
com -->|"用いるのは非推奨"| ipc
named_pipe -->|"で構成できる"| pipe_security
named_pipe -.->|"原因になり得る"| pipe_name_squatting
named_pipe -->|"軽減する"| pipe_name_squatting
file_based_integration -->|"用いるのは非推奨"| request_response_ipc
file_based_integration -->|"推奨される対応"| loosely_coupled_batch_integration
windows_service -.->|"前提とする"| pipe_security
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 名前付きパイプは同一マシン内の要求応答通信に対する本記事の推奨です。
- ローカルTCPはマシンをまたぐ通信の必要性に対する本記事の推奨です。
- gRPCはマシンをまたぐ通信の必要性に対する本記事の推奨です。
- ローカルTCPはフレーミング(メッセージ境界の決定)を前提とします。
- gRPCは名前付きパイプを利用します。
- gRPCはサービス・メッセージ増加による自前プロトコル維持負担に対する本記事の推奨です。
- 名前付きパイプは小規模なツール間通信(コマンド数個)に対する本記事の推奨です。
- gRPCを小規模なツール間通信(コマンド数個)に用いることは推奨されません。
- ファイルマッピング(メモリマップトファイル)は大容量・高頻度データ転送に対する本記事の推奨です。
- ファイルマッピング(メモリマップトファイル)は制御面とデータ面の分離(2チャネル構成)を前提とします。
- 制御面とデータ面の分離(2チャネル構成)は名前付きパイプを利用します。
- 制御面とデータ面の分離(2チャネル構成)はファイルマッピング(メモリマップトファイル)を利用します。
- COM(コンポーネントオブジェクトモデル)は32bit/64bitブリッジに対する本記事の推奨です。
- 名前付きパイプは32bit/64bitブリッジに対する本記事の推奨です。
- COM(コンポーネントオブジェクトモデル)をプロセス間通信(IPC)に用いることは推奨されません。
- 名前付きパイプはPipeSecurity(名前付きパイプのACL)で構成できます。
- 名前付きパイプはパイプ名の占有(スクワッティング)の原因になることがあります。
- 名前付きパイプはパイプ名の占有(スクワッティング)を軽減します。
- ファイル連携を同一マシン内の要求応答通信に用いることは推奨されません。
- ファイル連携は疎結合・非同期のバッチ連携に対する本記事の推奨です。
- WindowsサービスはPipeSecurity(名前付きパイプのACL)を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。