异步消息传递:原理、模型与应用
1. 异步消息传递概述
异步消息传递是一种比信号量更高级、更强大的机制。它允许进程通过交换消息的操作进行通信和同步。在 JR 中,消息传递通过进程向操作发送消息和从操作接收消息来实现。操作在这里充当消息队列,发送消息的进程在消息发送后立即继续执行,而接收消息的进程会等待,直到队列中有消息,然后取出一条消息。因此,发送语句是异步的(非阻塞),而接收语句是同步的(阻塞)。
1.1 操作作为消息队列
操作有两种角色,一种是由方法服务,另一种是定义消息队列。当操作定义消息队列时,它没有对应的方法,操作的调用(即消息)由一个或多个进程中的接收语句处理。接收语句从消息队列中移除一个调用,如果队列中没有调用,执行进程会延迟。
发送调用会将调用追加到消息队列,调用者在调用发送后立即继续。调用调用也是允许的,它提供了一种同步的消息传递形式。
接收语句指定一个操作,并给出一个由逗号分隔的零个或多个变量的列表。其一般形式如下:
receive op_expr (var1, var2, ...)
其中, op_expr
是任何计算结果为操作的表达式,可以直接通过操作名指定操作,也可以通过操作能力间接指定。接收语句为操作定义中的每个参数指定一个变量,变量类型必须与相应参数的类型匹配。
例如,考虑一个三进程系统,两个进程分别向第三个进程发送有序的消息流,第三个进程输出两个流的合并结果。以下是一个解决方案的概要: