1.直接通信方式
直接通信方式使用系统提供的两条通信原语send和receive,将消息直接发送给目标进程。如:
send(dest,msg)//将消息msg发送到目标(进程)dest中
receive(src,msg)//接收由src过来的msg
在调用这两个通信原语时,发送进程和接收进程都要以显式方式提供对方的标识符。
消息传递系统如果面临位于网络中不同机器上的进程通信时,情况会稍微有点复杂,将需要解决更多的问题,如:消息可能被网络丢失,一般使用确认消息。如果发送方在一定的时间段内没有收到确认消息,则重发消息。如果消息本身被正确接收,但是返回的确认消息丢失,发送方则重发消息,这样接收方就会收到两份同样的消息。一般使用在每条原始消息的头部嵌入一个连续的序号来解决这个问题。
我们可以用直接通信方式来实现前面讨论过的生产者/消费者的问题。(www.xing528.com)
在这个解决方案中,消费者进程这边首先将一条空消息发送给生产者。当生产者向消费者传递一个数据项时,是通过取走每一条接收到的空消息,然后送回填充了内容的消息给消费者的。
2.间接通信方式(信箱)
在使用间接通信方式时,发送进程把消息发送到某个中间实体中,接收进程从中间实体中取得消息。这种中间实体一般称为信箱,这种通信方式又称为信箱通信方式。该通信方法广泛用于计算机网络中,相应的通信系统称为电子邮件系统。
系统中提供的相关原语用于信箱的创建和撤销,信息的发送和接收。其中发送原语send(mailbox,message),它的功能为发送信件,如果指定的信箱未满则将信件送入信箱中并释放等待该信箱中的信件的等待者;否则发送信件者被置成等待信箱状态。接收原语为receive(mailbox,message),它的功能为接收信件,如果指定信箱中有信则取出一封信件并释放等待信箱的等待者,否则接收信件者被置成等待信箱中信件的状态。
在利用信箱通信时,在发送进程和接收进程之间,存在着四种关系:一对一关系,以发送进程和接收进程建立一条专用的通信链路;多对一关系,允许提供服务的进程与多个用户进程进行交互,也称客户/服务器交互;一对多关系,允许一个发送进程与多个接收进程交互,使发送进程用广播的形式发送消息;多对多关系,允许建立一个公用信箱,让多个进程都能向信箱投递消息,也可取走属于自己的消息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。