分布式之逻辑时钟

逻辑时钟

逻辑时钟用于捕获分布式计算过程中事件的因果依赖关系。

逻辑时钟是一个函数,它将事件 e e e映射到时间域 T T T中的某个值,表示为 C ( e ) C(e) C(e),并且作为事件 e e e的时间戳。

e i → e j e_i \rightarrow e_j eiej,则有 C ( e i ) > C ( e j ) C(e_i)>C(e_j) C(ei)>C(ej),但反之不成立。因此,我们无法根据时间戳的大小来判断两个事件的先后发生顺序。

为了解决这个问题,我们在时间戳中附加进程编号,表示为 C i ( e ) C_i(e) Ci(e)。对于两个进程 p i p_i pi p j p_j pj,若 i < j i<j i<j,就称 p i p_i pi的优先级小于 p j p_j pj的优先级。

注意,进程的优先级可以任意指定,这里为了方便理解以进程号作为优先级。

这时, e i x → e j y ⇔ C i ( e i x ) < C j ( e j y )    o r    C i ( e i x ) = C j ( e j y )   a n d   i < j e_i^x \rightarrow e_j^y \Leftrightarrow C_i(e_i^x)<C_j(e_j^y)~~or~~ C_i(e_i^x)=C_j(e_j^y)~and~i<j eixejyCi(eix)<Cj(ejy)  or  Ci(eix)=Cj(ejy) and i<j


逻辑时钟的计算方法:
  • 每个进程的逻辑时钟的初始值都为0。
  • 如果进程 i i i发生一个事件,则其逻辑时钟的值加一,即 C i = C i + 1 C_i=C_i+1 Ci=Ci+1
  • 若进程你 i i i向进程 j j j发送消息,进程i的逻辑时钟值先加一,然后将 C i C_i Ci和消息发送过去,进程 j j j更新自己的逻辑时钟为 C j = m a x ( C i , C j ) + 1 C_j=max(C_i,C_j)+1 Cj=max(Ci,Cj)+1

猜你喜欢

转载自blog.csdn.net/weixin_46878177/article/details/127349848
今日推荐