第六十三章:进程间通信
复习
- 线程共享同一地址空间,进程默认彼此隔离。
TL;DR
- 进程间通信让隔离的程序交换数据或通知。
- 管道、消息、信号和共享内存适合不同粒度的协作。
正文
命令行中的管道把一个程序的输出接到另一个程序输入;消息队列保存一条条消息;信号适合传递简短的事件通知;共享内存让两个进程映射同一批物理页,传大量数据很快,但需要自行协调读写。
这些机制都通过内核建立边界和权限。它们不是让隔离消失,而是在隔离之间开一扇有规则的门。选择方式取决于数据量、是否要保留边界、是否需要异步通知。
一旦多个执行者会碰同一份数据,新的麻烦立即出现:看似简单的加一,为什么会得到错误结果?
思考题
共享内存很快,为什么仍不能自动解决协作问题?
小结
- IPC 为隔离进程提供受控通信方式。
- 共享数据仍需要协调访问顺序。
思考题答案(仅供参考)
两个进程可能在同一时刻读写同一位置;速度并不会规定谁先做哪一步。
协议
本文采用 CC BY-NC-SA 4.0 协议发布。