Skip to content

进程间通信 IPC

进程间通信(Inter-Process Communication,IPC)是指两个或多个独立进程之间交换数据、传递信号、协调执行的机制。现代 OS 把每个进程关在独立的虚拟地址空间里——A 进程写的内存地址 0x4000 与 B 进程的 0x4000 毫无关系,这种隔离是保护的基石,但也让"进程之间交换数据"成了必须由 OS 专门提供的能力。IPC 就是 OS 在隔离之上挖出的受控通道:没有 IPC,浏览器无法把网页交给渲染进程,shell 无法把命令结果传给管道下游,微服务无法跨机器互相调用。

IPC 机制按数据流向与协调方式可分为两大类:①数据传递类——一方把字节流/消息/结构化数据搬给另一方,包括管道(匿名 pipe / 命名 FIFO)消息队列套接字(socket);②共享存储类——多方映射同一块物理内存直接读写,最快但需自配同步,包括共享内存与配对的信号量(semaphore)。此外还有用于异步通知信号(signal,如 SIGINT/SIGKILL)与用于跨机透明调用RPC(远程过程调用)。本叶是 OS 并发体系的 TIER 1 核心——理解每种 IPC 的速度、范围、同步语义与适用场景,才能在 shell 管道、多进程架构、微服务、分布式系统中做出正确选型。

评价

优点

  • 打破进程隔离:让独立地址空间的进程能安全交换数据,是 shell 管道、多进程架构、微服务通信的基础
  • 机制丰富可选:从最快的共享内存到最通用的套接字,速度/范围/复杂度梯度覆盖各类场景
  • 跨机延伸:套接字与 RPC 让 IPC 从单机扩展到网络,成为分布式系统的通信根基
  • 标准化:POSIX 统一了 pipe/msg/sem/shm/socket 接口,Linux/macOS/Unix 程序可移植

缺点

  • 同步复杂:共享内存需自配信号量,管道有阻塞/死锁边界,信号是异步中断难处理,并发 bug 难诊断
  • 性能差异大:消息队列/套接字有内核拷贝与上下文切换开销,选错机制(如用 socket 跑高频 IPC)会拖垮性能
  • 生命周期与可靠性:匿名管道随进程消亡、消息队列可能丢消息、网络套接字会断连,需要上层处理可靠性与顺序
  • 安全面:IPC 通道(共享内存/消息队列/FIFO/端口)若权限配置不当,可能被同机或跨机进程窃听/篡改

本叶地图

  • 入门 —— 为何需要 IPC、通信两大类(数据传递 vs 同步)、各机制概览、速度/范围对比
  • 管道、消息队列与套接字 —— 匿名 pipe(父子进程、半双工)、命名 FIFO(任意进程)、消息队列(内核结构化消息)、套接字(跨机网络)、信号(异步通知)
  • 共享内存与 RPC —— 共享内存(最快 IPC、需配信号量)、mmap、RPC(stub 序列化)、各 IPC 机制对比表
  • 参考 —— IPC 机制对比大表、代码模板、选型决策、易错点、权威链接

幻灯片地址

进程间通信 IPC

测试题

进程间通信 IPC 测试题