030 进程间通信前言

AI-摘要
小米里的大麦 GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
030 进程间通信前言
小米里的大麦进程间通信前言
1. 进程间通信的介绍
1. 进程间通信的目的
进程通信的核心目的是在多个独立运行的进程之间传递数据、同步执行、共享资源。即实现多个进程在数据层面的交互。
实际应用需求:
- 数据共享: 多个进程处理同一批数据,共享同样的资源。
- 通知事件: 某一进程完成任务后通知其他进程(如进程终止时要通知父进程)。
- 某种协同: 控制对临界资源的访问,防止竞争。
- 服务请求与响应: 客户端请求服务器、子进程向父进程返回结果。
- 进程控制 :有些进程希望完全控制另一个进程的执行(如 Debug 进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
[!NOTE]
每个进程本质上是一个 独立的虚拟地址空间(由 MMU/页表保护),天然是“互不相见”的。因为进程独立性的存在,导致进程通信的成本比较高,所以 通信是有成本的!想要通信,必须要构造一个 “公共的资源”(可访问区域)。这个“资源”谁来提供?—— 操作系统。
2. “公共资源”为什么不是由一个进程来提供?
如果由 某个进程创建并拥有 这个资源:
- 该资源的生命周期就依附于该进程。一旦这个进程结束,资源销毁,通信失效。
- 资源隶属问题,产生资源“纠纷”。
- 更重要的是,破坏了进程之间的隔离性,打破了操作系统“沙盒式”的管理理念。
所以:必须由 操作系统 来作为中立方、统一提供这类通信资源。
3. 如何访问这个共享资源 —— 通过系统调用接口
通信资源的创建/访问/销毁,都需要进程向操作系统发出系统调用。所以:“进程通信 = 通过系统调用访问 OS 提供的共享资源”。
4. 操作系统是如何组织这些通信资源的 —— 先描述,再组织
操作系统内部有专门的“进程通信模块”,有些还隶属于“文件系统子系统”。
5. 为什么和文件系统有关?
很多通信机制是 “文件化”处理的,所以,在 Linux 哲学里,“一切皆文件”,通信资源被抽象为“特殊文件”来管理。
2. 接口标准:System V vs POSIX
标准类型 | 出现时间 | 通信接口风格 | 特点 |
---|---|---|---|
System V | 较早 | 结构化复杂 | 功能强,兼容性差,接口繁琐 |
POSIX | 后来 | 简洁、现代 | 更现代、跨平台、统一接口规范 |
3. 基于文件系统的通信方式:管道(Pipe)
最早的 IPC 方式,基于 文件读写模型 构建:
- 无名管道(pipe):父子进程间通信,内核缓冲区。
- 有名管道(FIFO):通过路径文件节点访问,允许无关进程通信。
4. 现代进程间通信方式总览
类型 | 是否主流 | 是否跨主机 | 传输方式 | 使用场景 |
---|---|---|---|---|
1. 共享内存(+锁) | ✅ 高性能主流 | ❌ | 内存映射 + 同步机制 | 高性能缓存、图像处理、数据库内核 |
2. 管道(pipe / FIFO) | ❌ 较老 | ❌ | 内核缓冲区 | 父子进程,命令行通信 |
3. 消息队列(mq) | ☑️ 中等主流 | ❌ | 内核消息缓冲 | 日志、异步任务、模块解耦 |
4. Socket / Unix Socket | ✅ 主流 | ✅ | 网络/本地 | 客户端-服务端架构、微服务 |
5. gRPC / Thrift / HTTP RPC | ✅ 主流 | ✅ | 网络封装 | 微服务通信、分布式服务调用 |
6. ZeroMQ / nanomsg / Redis PubSub | ☑️ 高级封装 | ✅ | 用户态/网络 | 分布式流式通信,轻量消息传输 |
7. DBus / Binder / XPC | 特殊平台 | ❌ | 内核/对象封装 | 桌面系统、移动系统(Android) |
后续的文章则主要涉及下面的内容:
类别 | 技术 | 说明 |
---|---|---|
基础 | 管道(Pipe) | 本地进程间通信的经典方式,所有 IPC 的入门基础,Shell 编程中广泛使用 |
System V 共享内存 | 高性能场景常用,适用于高速数据通信,常用于数据库、服务与内核之间 | |
进阶 | 信号量(System V / POSIX) | 用于同步共享内存访问,避免多进程并发导致的数据竞争与混乱 |
POSIX 共享内存 / 互斥量 | 更现代的共享内存机制,支持线程同步,跨平台性好,新项目使用 |
5. 总结
进程通信的本质 是:通过 系统调用访问操作系统提供的共享通信资源(通常是一段特殊的内存空间),这个资源是 由内核统一管理,而不是某个进程私有,从而实现了进程之间的协作、数据交换与资源共享。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果