IPC = Inter-Process Communication(进程间通信)

常见的 IPC 方式

1. 管道(Pipe)

  • 匿名管道:只能用于有亲缘关系的进程(父子进程)之间,单向通信
  • 命名管道(FIFO):可用于任意进程间通信,以文件形式存在于文件系统中

2. 消息队列(Message Queue)

  • 消息的链表,存放在内核中
  • 允许多个进程读写消息
  • 消息有类型,可以按类型读取

3. 共享内存(Shared Memory)

  • 最快的 IPC 方式
  • 多个进程共享同一块内存区域
  • 需要配合同步机制(如信号量)使用

4. 信号量(Semaphore)

  • 主要用于进程同步和互斥
  • 是一个计数器,控制多个进程对共享资源的访问

5. 信号(Signal)

  • 用于通知进程某个事件已发生
  • 软件层面的中断机制
  • 常见信号:SIGINTSIGKILLSIGTERM

6. 套接字(Socket)

  • 可用于不同主机间的进程通信
  • 也可用于同一主机的进程通信(Unix Domain Socket)
  • 支持 TCP/UDP 等协议

7. 内存映射文件(Memory-Mapped File)

  • 将文件映射到进程的地址空间
  • 多个进程映射同一文件实现共享

各方式对比

方式速度复杂度适用场景
管道中等简单父子进程间简单通信
消息队列中等中等需要消息分类的场景
共享内存最快复杂大量数据高频交换
信号量中等进程同步控制
信号简单事件通知
套接字较慢复杂网络通信/跨主机通信

相关概念