定义
- 在进程间传输数据(交换信息)
- 进程间通信(Inter-Process Communication,IPC)
分类
低级通信
- 只能传递状态和整数值(控制信息)
- P、V 操作
- 缺点:信息量小,效率低,编程复杂
重点 高级通信(三种方式)
| 方式 | 描述 | 特点 |
|---|
| 共享内存模式 | 多个进程共享一段内存区域 | 最快,需信号量同步互斥 |
| 消息传递模式 | 进程间通过消息发送/接收通信 | 无共享内存,适用于分布式系统 |
| 共享文件模式(管道) | 通过文件作为中介传递数据 | 简单,但效率较低 |
共享内存(Shared Memory)
- 最快速的 IPC 方式:进程直接读写同一块物理内存
- 无需数据拷贝(对比消息传递需要内核缓冲拷贝)
- 需配合 信号量 实现同步互斥
- 适用场景:大量数据传输
消息传递(Message Passing)
直接通信
- 指名道姓:发送方明确指定接收方 PID,接收方明确指定发送方
- 系统调用:
send(dest, msg) / recv(src, msg)
间接通信
- 通过消息队列/信箱(Mailbox)作为中介
- 多个进程可共享同一个信箱
- 系统调用:
send(M, msg) / recv(M, msg)
管道(Pipe)
- 单向数据流:数据从一端写入,从另一端读出
- 无名管道:只用于父子进程或有亲缘关系的进程之间
- 命名管道(FIFO):通过文件系统中的特殊文件,可用于任意进程间通信
- 管道本质是内核中的一个共享缓冲区
三种方式对比
| 方式 | 速度 | 同步需求 | 适用场景 |
|---|
| 共享内存 | 最快 | 需同步 | 大量数据、高性能 |
| 消息传递 | 中等 | 自动同步 | 分布式、小数据 |
| 管道 | 较慢 | 自动同步 | 简单通信、父子进程 |