IPC = Inter-Process Communication(进程间通信)
常见的 IPC 方式
1. 管道(Pipe)
- 匿名管道:只能用于有亲缘关系的进程(父子进程)之间,单向通信
- 命名管道(FIFO):可用于任意进程间通信,以文件形式存在于文件系统中
2. 消息队列(Message Queue)
- 消息的链表,存放在内核中
- 允许多个进程读写消息
- 消息有类型,可以按类型读取
3. 共享内存(Shared Memory)
- 最快的 IPC 方式
- 多个进程共享同一块内存区域
- 需要配合同步机制(如信号量)使用
4. 信号量(Semaphore)
- 主要用于进程同步和互斥
- 是一个计数器,控制多个进程对共享资源的访问
5. 信号(Signal)
- 用于通知进程某个事件已发生
- 软件层面的中断机制
- 常见信号:
SIGINT、SIGKILL、SIGTERM等
6. 套接字(Socket)
- 可用于不同主机间的进程通信
- 也可用于同一主机的进程通信(Unix Domain Socket)
- 支持 TCP/UDP 等协议
7. 内存映射文件(Memory-Mapped File)
- 将文件映射到进程的地址空间
- 多个进程映射同一文件实现共享
各方式对比
| 方式 | 速度 | 复杂度 | 适用场景 |
|---|---|---|---|
| 管道 | 中等 | 简单 | 父子进程间简单通信 |
| 消息队列 | 中等 | 中等 | 需要消息分类的场景 |
| 共享内存 | 最快 | 复杂 | 大量数据高频交换 |
| 信号量 | 快 | 中等 | 进程同步控制 |
| 信号 | 快 | 简单 | 事件通知 |
| 套接字 | 较慢 | 复杂 | 网络通信/跨主机通信 |