Linux 提供多种进程间通信(IPC)机制,不同方案在性能、同步复杂度与使用场景上差异显著。
一、主要 IPC 机制对比
| 机制 | 方向 | 性能 | 典型场景 |
|---|---|---|---|
| 匿名管道 | 单向 | 中 | 父子进程简单通信 |
| 命名管道(FIFO) | 单向 | 中 | 无亲缘关系进程 |
| 共享内存 | 双向 | 最高 | 大数据量高频交换 |
| Unix Domain Socket | 双向 | 高 | 本机服务通信 |
| 消息队列 | 双向 | 中 | 结构化消息传递 |
二、共享内存示例
c
int shm_fd = shm_open("/my_shm", O_CREAT | O_RDWR, 0666);
ftruncate(shm_fd, 4096);
void *ptr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);共享内存本身不提供同步,必须配合信号量或互斥锁使用。Unix Domain Socket 因绕过网络协议栈,在本机 RPC 场景下性能优于 TCP 回环。