进程间通信简称叫IPC-Inter Process Communication,如下图所示,进程间通信又可以分为间接通信和直接通信两种。
1、直接通信
进程必须正确地命名对方:Send(P,message):发送信息到进程P;Receive(Q,message):从进程Q接收消息。
通信链路的属性:(1)自动建立链路;(2)一条链路恰好对应一对进程通信;(3)每对进程之间只有一个链接存在;(4)链接可以是单向的,但通常是双向的。
2、间接通信
定向从消息队列接收信息: 每个消息队列都有一个唯一的ID;只有他们了共享一个消息队列,进程才能够通信。
通信链路的属性:(1)只有进程共享一个共同的消息队列,才建立链路;(2)链接可以与许多进程相关联;(3)每对进程可以共享多个通信链路;(4)链接可以单向或者双向。
间接通信的操作包括:创建一个新的消息队列;通过消息队列发送和接收消息;销毁消息队列。
间接操作的原语定义如下:send(A,message): 发送消息到队列A;receive(A,message): 从队列A接收消息
3、阻塞发送
只要当消息发送出去并被接收方接收到之后,发送方才会继续做其他的工作,否则发送方就处于等待状态。而对于接收方而言,其会一直等待到接收到消息之后才会继续进行其他工作。阻塞发送是一种同步的发送方式。
4、非阻塞发送
发送方发送完消息之后就可以继续进行其他工作,不用管消息是否被接收方收到;对于接收方而言,可以接收到有效消息或者没接收到消息,都可以继续执行。非阻塞发送是一种异步发送方式。接收方接收到数据和发送方发送的时间之间可能会有一个较大的时间gap值,这个较大的时间gap值是异步性的一个体现。