进程间通信(IPC)是指在不同进程之间传递数据或信号的机制。由于每个进程有独立的地址空间,进程间不能直接访问对方的数据,需要借助 OS 提供的通信机制。
shmget / shmat。send(P, msg),receive(Q, msg));send(mailbox, msg),receive(mailbox, msg));pipe());| 通信方式 | 速度 | 复杂度 | 适用场景 | 是否需要同步 |
|---|---|---|---|---|
| 共享存储 | 最快 | 高(需同步) | 大量数据交换 | 是 |
| 消息传递 | 中等 | 低 | 结构化通信 | 否(内核缓冲) |
| 管道通信 | 中等 | 低 | 父子进程 / 命令行 | 否(内核缓冲) |
| 对比项 | 匿名管道 | 命名管道 |
|---|---|---|
| 适用范围 | 父子进程 | 任意进程 |
| 方向 | 单向 | 双向 |
| 持久性 | 进程结束即销毁 | 文件系统中存在 |
| 考法 | 解题套路 |
|---|---|
| 三种 IPC 方式对比 | 共享存储最快但需同步,消息传递灵活,管道简单 |
| 管道的特点 | 半双工、内核缓冲区、读写阻塞、先入先出 |
| 共享存储为什么快 | 数据不经过内核中转,直接在进程地址空间读写 |
| 消息传递的两种方式 | 直接通信(指定进程)和间接通信(通过信箱) |
| 管道满 / 空的行为 | 管道满 → 写阻塞;管道空 → 读阻塞 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。