进程默认拥有隔离地址空间,交换数据必须借助内核提供的 IPC。选择方式要看是否同机、消息边界、吞吐、延迟、持久性、安全与同步需求,没有一种机制在所有维度都最好。

匿名管道是单向字节流,常用于有亲缘关系进程;命名管道通过文件系统名称让无亲缘进程连接。消息队列保留消息边界,可异步解耦发送和接收,但有容量、复制和生命周期管理成本。共享内存把同一物理页映射进多个进程,数据交换少复制、吞吐高,却必须额外使用信号量、互斥量等协调读写。

Socket 提供统一的双向通信接口,Unix Domain Socket 适合同机,网络 Socket 可跨主机。它们是字节流或数据报语义,应用仍需定义协议、长度与错误恢复。信号适合传递少量事件,不宜承载复杂数据。Android Binder 则把调用、对象引用与身份校验结合到系统 IPC 模型中。

性能不能只数“拷贝次数”:上下文切换、序列化、锁竞争、缓存一致性和消息大小都重要。共享内存最快的说法只在正确同步且工作负载合适时成立。

误区是认为管道天然双向、TCP 一次发送对应一次接收、共享内存无需锁、消息队列必然持久,以及忽略对端崩溃与背压。小结:先定义通信语义与失败模型,再选择传输机制;高性能 IPC 仍需要明确所有权、同步和流量控制。