Algorithm 具有可变消息旅行时间的Lamport时间戳

Algorithm 具有可变消息旅行时间的Lamport时间戳,algorithm,timestamp,distributed-computing,logical-operators,clock,Algorithm,Timestamp,Distributed Computing,Logical Operators,Clock,我想我误解了你的意思。它似乎期望消息在分布式端点之间传输所需的时间相同 假设进程p1按顺序发送消息m1和m2以处理p2。根据本文算法部分的伪代码,我们有: # we start at 0 time(p1) = 0 # we send m1 time(p1) = time(p1) + 1 = 1 send(m1, 1) # we send m2 time(p1) = time(p1) + 1 = 2 send(m2, 2) 如果m1在m2之前达到p2,则一切正常。但是如果m2排在第一位,我们

我想我误解了你的意思。它似乎期望消息在分布式端点之间传输所需的时间相同

假设进程
p1
按顺序发送消息
m1
m2
以处理
p2
。根据本文算法部分的伪代码,我们有:

# we start at 0
time(p1) = 0

# we send m1
time(p1) = time(p1) + 1 = 1
send(m1, 1)

# we send m2
time(p1) = time(p1) + 1 = 2
send(m2, 2)
如果
m1
m2
之前达到
p2
,则一切正常。但是如果
m2
排在第一位,我们会得到:

# we start at 0
time(p2) = 0

# we receive m2 first
time(p2) = max(2, time(p2)) + 1 = max(2, 0) + 1 = 3

# we receive m1 second
time(p2) = max(1, time(p2)) + 1 = max(1, 3) + 1 = 4
因此在
p2
的本地时间(
time(p2)
)中,
m2
的时间是3,而
m1
的时间是4。这与最初发送消息的顺序相反



我是否遗漏了一些基本信息,或者Lamport时间戳是否需要一致的旅行时间才能工作?

消息的时间是消息中包含的时间,而不是接收消息的进程的时间

计时器在两个进程之间逻辑上是共享的,因此它需要对两个进程的事件(发送)进行计数,这就是为什么接收器在接收mesage时在时间上加一个

该算法试图保持两个进程的计时器同步,即使消息丢失或延迟,这就是为什么接收方最大限度地利用其时间视图和发送方在消息中发现的时间视图。如果这些不相同,则某些消息已丢失或延迟。这将导致两个进程具有不同的时间视图,但在发送和接收下一条消息时(在任一方向),时钟将重新同步


如果这两个进程同时发送一条消息,那么这两条消息将包含相同的时间,这就是为什么它不是一个总顺序。但时钟最终仍将重新同步。

消息的时间是消息中包含的时间,而不是接收消息的进程的时间

计时器在两个进程之间逻辑上是共享的,因此它需要对两个进程的事件(发送)进行计数,这就是为什么接收器在接收mesage时在时间上加一个

该算法试图保持两个进程的计时器同步,即使消息丢失或延迟,这就是为什么接收方最大限度地利用其时间视图和发送方在消息中发现的时间视图。如果这些不相同,则某些消息已丢失或延迟。这将导致两个进程具有不同的时间视图,但在发送和接收下一条消息时(在任一方向),时钟将重新同步


如果这两个进程同时发送一条消息,那么这两条消息将包含相同的时间,这就是为什么它不是一个总顺序。但时钟最终还是会重新同步。

我不确定我是否理解。您是说p2中接收消息的时间戳的排序方式与p1中发送消息的时间戳的排序方式(<或>)从来都不是重点吗?如果是,那么逻辑时钟的意义/用途是什么?@hmm消息中的时间戳永远不会被重写;他们和信息发送时一样。因此,不,它不是为了产生“接收时间戳”。但是,请注意,对消息的回复——或由消息触发的另一个动作,如链接文章第一段中的激励示例所示——必须比其响应的消息具有更大的时间戳,这允许对网络事件进行某种程度的排序,这是迈向矢量时钟理念的一块垫脚石。了解该算法的应用和缺点有助于了解网络时钟的价值。我建议读兰波特的论文;虽然是学术性的,但它们通常可读性很强。引用第二段:“进程B接收消息,并因此将自己的读取请求消息发送到磁盘。如果有一个时间延迟导致磁盘同时接收两条消息,它可以确定哪个消息发生在另一条消息之前:({\displaystyle a}A发生在{\displaystyle B}B之前,如果一个人可以通过两种类型的移动序列从{\displaystyle A}A到{\displaystyle B}B:向前移动,同时保持在同一过程中,并跟随从发送到接收的消息。)“如果我理解正确,如果您可以通过这两个转换到达事件,它应该保证事件的顺序。在我们的情况下,我们可以<在
p1
中,code>sm1在
sm2
之前(因为我们按顺序发送了它们)<
p2
中的code>rm1和
rm2
分别位于
sm1
sm2
之后,因为发送消息在接收之前。所以我们有(1)
sm1->rm1
,(2)
sm2->rm2
,(3)
sm1->sm2
。通过及物性。。。妈的,没有什么可以给我们的
rm1->rm2
。好的,我想我现在明白了。如果你确认我的理解是正确的,我会接受这个答案。我不确定我是否理解。您是说p2中接收消息的时间戳的排序方式与p1中发送消息的时间戳的排序方式(<或>)从来都不是重点吗?如果是,那么逻辑时钟的意义/用途是什么?@hmm消息中的时间戳永远不会被重写;他们和信息发送时一样。因此,不,它不是为了产生“接收时间戳”。但是,请注意,对消息的回复——或由消息触发的另一个动作,如链接文章第一段中的激励示例所示——必须比其响应的消息具有更大的时间戳,这允许对网络事件进行某种程度的排序,这是迈向o理念的垫脚石