Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第六十三章:进程间通信

复习

  • 线程共享同一地址空间,进程默认彼此隔离。

TL;DR

  • 进程间通信让隔离的程序交换数据或通知。
  • 管道、消息、信号和共享内存适合不同粒度的协作。

正文

  命令行中的管道把一个程序的输出接到另一个程序输入;消息队列保存一条条消息;信号适合传递简短的事件通知;共享内存让两个进程映射同一批物理页,传大量数据很快,但需要自行协调读写。

  这些机制都通过内核建立边界和权限。它们不是让隔离消失,而是在隔离之间开一扇有规则的门。选择方式取决于数据量、是否要保留边界、是否需要异步通知。

  一旦多个执行者会碰同一份数据,新的麻烦立即出现:看似简单的加一,为什么会得到错误结果?

思考题

共享内存很快,为什么仍不能自动解决协作问题?

小结

  • IPC 为隔离进程提供受控通信方式。
  • 共享数据仍需要协调访问顺序。

思考题答案(仅供参考)

  两个进程可能在同一时刻读写同一位置;速度并不会规定谁先做哪一步。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。