首页/操作系统/进程管理/进程间通信方式 🔗 在 Obsidian 中打开
操作系统 · 进程管理 · IPC

进程间通信方式

重要度 ★★★★ IPC共享内存消息传递管道
速查
进程间通信(IPC)是进程交换数据的机制。三大方式:共享存储(最快、需同步)、消息传递(灵活、需内核)、管道(半双工、内核缓冲)。只有共享存储的数据不经过内核中转

核心概念

进程间通信(IPC)是指在不同进程之间传递数据或信号的机制。由于每个进程有独立的地址空间,进程间不能直接访问对方的数据,需要借助 OS 提供的通信机制。

1. 共享存储(Shared Memory)

  • 多个进程共享一块内存区域,通过对该区域的读写实现通信;
  • 需要同步机制(如信号量)防止竞争;
  • 速度最快(数据不需要在用户态和内核态之间复制);
  • POSIX 共享内存:shmget / shmat

2. 消息传递(Message Passing)

  • 进程间通过发送和接收消息来交换数据;
  • 直接通信:发送方直接指定接收方(send(P, msg)receive(Q, msg));
  • 间接通信:通过信箱 / 消息队列(send(mailbox, msg)receive(mailbox, msg));
  • 消息传递需要内核参与,开销比共享内存大。

3. 管道通信(Pipe)

  • 匿名管道:父子进程间,单向,半双工(pipe());
  • 命名管道(FIFO):无亲缘关系的进程间,双向;
  • 管道本质是内核中的一个缓冲区,一端写一端读;
  • 管道满时写阻塞,管道空时读阻塞。

关键性质

通信方式速度复杂度适用场景是否需要同步
共享存储最快高(需同步)大量数据交换
消息传递中等结构化通信否(内核缓冲)
管道通信中等父子进程 / 命令行否(内核缓冲)
对比项匿名管道命名管道
适用范围父子进程任意进程
方向单向双向
持久性进程结束即销毁文件系统中存在

常见考法

考法解题套路
三种 IPC 方式对比共享存储最快但需同步,消息传递灵活,管道简单
管道的特点半双工、内核缓冲区、读写阻塞、先入先出
共享存储为什么快数据不经过内核中转,直接在进程地址空间读写
消息传递的两种方式直接通信(指定进程)和间接通信(通过信箱)
管道满 / 空的行为管道满 → 写阻塞;管道空 → 读阻塞

易错点

必记
  1. ⚠️ 共享存储虽然最快,但必须配合同步机制,否则会出现数据竞争。
  2. ⚠️ 管道是半双工的,不是全双工——同一管道只能单向传输。
  3. ⚠️ 匿名管道只能用于父子进程间,命名管道可用于任意进程。
  4. ⚠️ 消息传递和管道通信都需要内核参与(数据在用户态和内核态之间复制)。
  5. ⚠️ 共享存储不需要内核参与数据传输(但建立共享区需要系统调用)。

记忆卡片

三种 IPC 方式?
共享存储、消息传递、管道通信。
哪种速度最快?为什么?
共享存储——数据不经过内核中转,直接在进程间共享。
匿名 vs 命名管道?
匿名用于父子进程(单向),命名用于任意进程(双向)。
共享存储需要同步吗?
需要——必须用信号量等机制防止多进程同时读写导致数据竞争。

交互动画 · 三种 IPC 对比

进程 A用户态 进程 B用户态 内核中转参与度
点击上方方式,观察进程 A、B 与中间层(内核 / 共享区)的数据通路差异。
提示:共享存储不经内核中转,消息传递与管道需内核缓冲。
示意图:橙色流动线表示数据路径;共享存储直接读写共享区(中间层为共享内存,内核不中转),消息/管道经由内核缓冲。

相关知识点

process-and-thread process-synchronization-semaphore

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。