该算法用于维持消息的因果顺序,即首先应首先接收发送的消息。如果发送(M1)–>发送(M2),则对于所有接收消息M1和M2的进程,应在M2之前接收M1。
特征 :
- 基于广播的消息传递。
- 消息的大小很小。
- 更多没有的邮件已发送。
- 有限的州信息。
关键点 :
- 每个进程在发送消息时将其矢量时钟加1。
- 如果该进程已收到其之前的所有消息,则将消息传递给该进程。
- 否则缓冲消息。
- 更新该进程的向量时钟。
参考 :
- 工艺:P i
- 事件:e ij ,其中i:process是数字,而j:第i个进程中的第j个事件。
- T m :消息m的矢量时间戳。
- C i与进程P i相关的矢量时钟;第j个元素为C i [j],包含过程P j中当前时间的P i最新值。
协议 :
P i向P j发送消息–
- P i使C i [i]递增,并为消息m设置时间戳t m = C i [i]。
P j从P i接收消息–
- 当P j ,j!= i接收到带有时间戳t m的m时,它将消息的传递延迟到两个都如下。
Cj[i] = tm[i] - 1; and for all k <= n and k != i, Cj[k] <= tm[k].
- 当消息传递到P j时,更新P j的矢量时钟。
- 检查缓冲区,看是否可以传送。
例子 –
- 所有进程的初始状态为000。
- M1从P3广播到P1和P2。 e31将向量时钟更新为(001)并发送P1和P2。
- P2接受带有时间戳(001)的M1,因为当将其与初始时间戳(即000)进行比较时,它会发现M1是它正在接收的第一条消息。
- 现在我们考虑在M1到达P1之前,P2将M2发送给P1和P3,并带有时间戳(011)。
- P1不能接受M2,因为在将M2的时间戳与其初始时间戳进行比较时,发现差异,因为P1没有早期时间戳(001)的消息,因此M2存储在缓冲区中。
- 现在,M1被P1接收并接受。
- M2从缓冲区中删除并被P1接受。
- M3被P3接受,因为时间戳没有差异。