分为两大类:单机IPC(同一台服务器)、套接字(可跨机器),同时区分普通进程通信 & 多核CPU核间通信本质一致。
一、管道 Pipe(匿名管道)
原理:内核开辟一块环形缓冲区,一个进程写端写入数据,另一进程读端取出;仅支持父子/有亲缘进程,单向半双工。
特点:内存临时空间,进程全部销毁后缓冲区自动释放。
二、命名管道 FIFO
原理:基于磁盘文件作为标识,内核依旧维护环形缓冲;无亲缘关系进程可通过同一个管道文件完成读写。
区别Pipe:任意进程互通,可出现在文件系统。
三、消息队列 Message Queue
原理:内核创建消息链表队列,每个消息带自定义类型标记;进程按类型投递消息、按类型精准读取,支持多进程收发、异步通信。
四、共享内存 Shared Memory(性能最快IPC)
原理:内核将同一块物理内存页,映射到多个不同进程的虚拟地址空间;多个进程直接读写同一片内存,无内核数据拷贝。
补充:本身不带同步互斥,必须搭配信号量解决竞态问题。
五、信号量 Semaphore
原理:内核维护整型计数器,本质是同步互斥工具,不传输业务数据;
P操作(减一占用资源)、V操作(加一释放资源),常配合共享内存做并发锁控制。
六、信号 Signal
原理:内核给进程发送软中断指令,依靠信号编号通知程序发生特定事件;进程注册回调函数捕获信号执行业务处理,多用于异常终止、异步通知,几乎不传输大量数据。
七、内存映射 mmap
原理:把磁盘文件/匿名内存映射进进程虚拟内存,多进程映射同一文件,即可通过内存读写完成数据互通;兼顾持久化与高速读写。
八、UNIX域套接字 Unix Socket
原理:本地内核态套接字,不走网卡协议栈,基于本地文件地址通信,流式/数据报两种模式,稳定低延迟,Nginx、容器进程最常用。
九、通用跨主机:TCP/UDP Socket
原理:依托网卡协议栈,跨服务器进程通信,也可单机使用;适用范围最广,协议封装复杂,有网络开销。
补充:多核CPU「核间通信」底层本质
1. 软件层面:依旧使用上面全部IPC方案,CPU核心只是执行单元,通信逻辑由内核统一管理;
2. 硬件层面:CPU核间依靠 L3共享缓存、跨核TLB同步、中断IPI核间中断 完成硬件级通知,内核IPC全部建立在这套硬件通信基础之上。
面试极简速记
1. 追求极致性能:共享内存+信号量
2. 简单流式单向传输:管道/FIFO
3. 分类异步消息:消息队列
4. 本地高可靠多进程互通:UNIX Socket
5. 异步事件通知:信号
6. 需要落地持久化:mmap文件映射
7. 跨机器通信:标准网络Socket
关注我,一起了解更多,谢谢您!