进程通信(IPC,Inter-Porcess Communcation)是进程进行通信和同步的机制。
IPC提供两个基本操作:
- 发送(send message)
- 接收(receive message)
进程通信流程:
- 在通信进程之间建立通信链路
- 通过send/receive交换信息
进程通信方式:
直接通信:
进程必须正确命名对方,比如send(p,message)向p发送信息,receive(q,message)从q中接收信息
通信链路有如下属性:自动建立连接;一条链路恰好对应一对通信进程;每对进程之间只有一个链接存在;链路可以是单向的,但是通常为双向的间接通信:
通过OS维护的消息队列实现进程之间的通信(接收发送信息)
每个消息队列都有一个唯一标识,只有共享了相同消息队列的进程才能够通信
通信链路有如下属性:只有共享了相同消息队列的进程才能建立连接,比如send(a,message)向消息队列a发送信息,receive(a,message)从消息队列a中接收信息 ;连接单向或者双向;消息队列可以与多个进程相互关联;每个进程共享多个消息队列(也就是进程和消息队列是多对多的关系)
阻塞通信(同步)与非阻塞通信(异步)
同步通信:
阻塞发送:发送者发送消息后进入等待(阻塞)直到接受者成功接受
阻塞接收:接收者请求接收信息后等待(阻塞)直到成功接受一条消息
异步通信:
非阻塞发送:发送者发送消息后,可立即进行其他操作
非阻塞接收:接收者请求接收信息后,如果没有消息发送就接收不到信息,不需要等待
通信链路缓冲:
- 0容量:发送方必须等待接受方
- 有限容量:缓冲队列满,发送方必须等待
- 无限容量:发送方不需要等待
上面是关于IPC通信的基本概念,下面我们看一看一些常见的进程通信方式。
MOOC讲了四种进程通信方式:
信号,管道, 消息队列, 共享内存,由于都是基本概念,我偷个懒直接复制下来了: