进程间的通信叫 IPC (InterProcess Communication),指在不同进程之间传播或交换信息。
IPC 的方式 有 管道(无名管道和命名管道)、消息队列、信号量、共存存储、Socket(支持不同主机上的两个进程IPC)
- 管道
在内核中申请一块固定大小的缓冲区,程序有读写权利,它是一种特殊的文件,不属于任何文件系统,只存在于内存中。面向字节流、自带同步互斥机制、半双工,单向通信,两个管道实现双向通信。
-
- 无名管道:一般使用fork函数实现父子进程通信。
- 命名管道:用于没有血缘关系的进程也可以进程间通信。
- 消息队列
在内核中创建一队列,队列中的每个元素是一个数据报,不同进程可以通过句柄访问这个队列。消息队列独立与发送和接受进程,可以通过顺序和消息类型读取。消息队列可以实现双向通信。
- 信号量
在内核中创建一个信号量合集(数组),信号量(数组的元素)都是1,使用P操作-1,使用V操作+1,通过对临界资源进行保护实现多进程的同步。
- 共享内存
将同一块物理内存一块映射到不同的进程的虚拟地址空间中,实现不同进程对同一资源共享。是目前最快的IPC形式,直接从内存中直接读取。由于共享资源是临界资源,操作室需要保证原子性,可使用信号量或互斥锁。
- socket
socket是应用层与TCP/IP协议通信的中间软件抽象层,是一组接口,复杂的TCP/IP协议隐藏在Socket接口后面。socket是一种“open-read/write-close”的模式实现,服务器和客户端鸽子维护一个“文件”,建立连接打开后可以向自己文件写入内容共对方读取或者读取对方的内容,通讯结束时关闭文件。是一种可以网间通信的方式。
以上总结参考:https://mp.weixin.qq.com/s/kPYzpIuW67n-Ulf2YLkKAw