Skip to content

进程间通讯 IPC(InterProcess Conmunication)

不同进程之间传播或者交换信息

管道(无名管道和命名管道)

在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,可以看成是特殊的文件

  • 无名管道
    • fork 实现父子进程通讯
  • 命名管道
    • 没有关系的进程间通讯

消息队列

  • 内核中创建一个队列,队列中元素都是一个数据报,不同的进程可以通过句柄访问这个队列
  • 消息队列独立于发送和接收进程,可以通过顺序和消息类型读取,或者 fifo 读取
  • 可以实现双向通讯

信号量

  • 内核中创建一个信号量集合(数组)
  • 默认 1,P -1, V +1
  • 通过临界资源进行保护实现多进程的同步

共享存储

  • 将同一块物理内存一块映射到不同的进程的虚拟地址空间中,实现不同进程对同一资源的共享
  • 不需要从用户态 -> 内核态频繁的切换和数据拷贝
  • 内存共享是临界资源,需要操作是必须要保证原子性,使用信号量或者互斥锁都可以实现

Socket 不同主机上的两个进程通讯

  • 一组抽象的接口