Skip to content

进程间通信

管道、共享内存、消息队列、信号、Socket。

Updated View as Markdown
For humans

进程间通信

进程地址空间隔离,协作必须走 IPC。面试主线:各方式机制、适用场景、性能对比。

IPC 方式总览

五种 IPC: 机制与方向

方式 机制 特点 适用
管道 内存缓冲,单向字节流 简单,半双工,无名管道限父子 父子进程、shell 管道
命名管道(FIFO) 文件系统入口的管道 无亲缘关系可用 简单流式通信
消息队列 内核消息链表,按类型读 有界、消息化,跨进程解耦 短消息、解耦场景
共享内存 同一物理页映射到多进程 最快(无拷贝),要自己同步 大数据量、性能敏感
信号 异步通知事件 不传数据,只是通知 事件通知、kill
Socket 内核缓冲,网络协议栈 可跨机器、全双工 网络通信、RPC

管道 vs 共享内存

  • 管道:数据要经过内核缓冲(写→内核→读),两次拷贝,慢但安全(内核同步)
  • 共享内存:直接读写同一块物理内存,零拷贝,最快,但同步自己做(配信号量/互斥锁)

面试话术:共享内存是性能之王,管道是安全之选。性能敏感大流量用共享内存+信号量,一般场景管道/消息队列足够。

信号

  • 异步通知:进程收到信号中断当前执行,跑处理器
  • 常见信号:SIGKILL(强制杀,不可捕获)、SIGTERM(请求退出)、SIGINT(Ctrl+C)、SIGHUP(终端断开)
  • 应用场景:优雅退出、定时器(alarm)、父子进程通知

Socket 与本地通信

  • Unix domain socket:本机进程通信,不走网络栈,比 TCP socket 快
  • TCP socket:可跨机器,是分布式系统的基础(见网络分类)
  • 本质:一切 IPC 在网络化后都是 socket

面试追问

  1. 最快的 IPC 是什么? 共享内存:零拷贝直接读写。代价是同步自己管(信号量/锁)
  2. 管道为什么慢? 数据经内核缓冲两次拷贝。安全(内核同步)换性能
  3. 共享内存要配什么? 信号量/互斥锁:多进程并发读写同一块内存,同步必须自己做
  4. 信号能传数据吗? 不能,只是异步通知。传数据用管道/消息队列/共享内存
  5. 本机高性能通信用什么? Unix domain socket 或共享内存。TCP 有网络栈开销,跨机才需要
Navigation

Type to search…

↑↓ navigate↵ selectEsc close