【问题标题】:Logical Clocks: Lamport Timestamps逻辑时钟:Lamport 时间戳
【发布时间】:2023-03-27 16:12:01
【问题描述】:

我目前正在尝试了解 Lamport 时间戳。考虑两个进程 P1(产生事件 a1a2、...)和 P2(产生事件 >b1b2、...)。让 C(e) 表示与事件 an e 关联的 Lamport 时间戳。我为每个事件创建了时间戳,如Wikipedia article about Lamport timestamps 中所述:

根据 Wikipedia,以下关系适用于所有事件 e1e2

如果 e1 在 e2 之前发生,则 C(e1)

让我们看看a1b2。显然 a1 发生在 b2 之前,并且由于 C(a1) = 1C(b2) = 3,关系成立:C(a1) .

问题:该关系不适用于 b3a3。显然,b3发生在a3之前。但是,C(b3) = 4C(a3) = 3。所以 C(b3) 确实 适用。

我误会了什么?非常感谢您的帮助!

【问题讨论】:

    标签: messaging distributed clock timing distributed-system


    【解决方案1】:

    是的,这个定义可能有点令人困惑。到目前为止,其他人所说的都是正确的,但是可能缺少一个词,以更好地理解系统。 - 并发

    如果您的进程 p1p2 在同一台机器上运行,则确实没有太多需要使用灯时钟(可能是一些极其特殊的情况)。相反,您可以只使用操作系统提供的时钟。但是,如果 p1p2 位于被缓慢且不可靠的网络隔开的计算机上怎么办?

    Lamport 假设,您不能信任本地时钟,并且您没有分布式系统的任何全局状态,两台不同计算机上的事件按顺序发生。那时您称这些事件同时发生。

    当您调试分布式系统的执行并且您会看到事件 a3b3 时,您自然会假设 a3 发生在 b3 之前。在您的具体情况下,您现在会声称,是的,但那是错误的。但是,由于事件不相关,因为它们没有相互通信,因此通常假定顺序是并发的,在这种情况下,对于整个执行过程来说,先发生还是后发生并不重要系统。

    由于计算机和网络的运行速度如此之快而且仍然非常精确,因此有时很难理解,让我们以稍微不同的方式看待同一件事:

    p1p2 是 100 年前生活在两个不同山谷中的两个人。他们使用 pidgins 一起交流,从不谈论他们何时完成某项任务,只谈论他们做了什么。这样,没有人可以知道,如果 a3 发生在 b3 之前或相反,因此它们同时发生。也许不是没有人,上帝在 p1p2 上看着它。

    不幸的是,当你有一个分布式系统时,你不能同时观看 p1p2 的上帝,只是出于消息来自的原因p1 可能需要比 p2 更长的时间。因此,即使您的监控系统(上帝)在收到有关 a4 的信息之前已经收到了 b3 的信息,但这并不意味着它们是按顺序发生的,也许是包包含有关 a4 的信息的路径更长或更慢。

    最后,还有一个东西叫vector clocks。每个进程都有一个用于系统中每个进程的灯时钟。这里的关键是,如果 a 的所有灯时钟都小于或等于 b 的灯时钟,则事件 a 只会在事件 b 之前发生。如果你在你的小例子上尝试一下,你会发现在其他 => 它们是并发的之前没有发生任何事件。

    【讨论】:

      【解决方案2】:

      Lamport 假设:我们通常不能使用物理时间来找出其中发生的任意一对事件的顺序。在建议的示例中,您忽略了这个假设。

      P1P2 独立增加它们的时钟。当事件发生时,发起进程将其当前值发送给目标进程,目标进程检查接收到的值是否小于其当前值。如果是,则将其当前值更改为接收值 + 1,否则丢弃接收值。在您的情况下,P1P2 不会发送它们的事件 a3b3

      【讨论】:

      • 你有没有参考“我们通常不能使用物理时间来找出其中发生的任意一对事件的顺序”?
      【解决方案3】:

      我发现了我的错误。我写道:

      如果 e1 在 e2 之前发生,则 C(e1)

      但是,Lamport 将“发生在之前”定义为部分排序。这就是 Wikipedia 关于偏序集的说法:

      这种关系被称为偏序,以反映并非每一对元素都需要相关的事实:对于某些对,可能在poset中没有一个元素先于另一个元素。

      根据 Lamport 对“发生在之前”的定义,b3a3 不相关,因此 b3 没有“发生在之前” " a3,因此问题中所述的等式不必成立。

      【讨论】:

        猜你喜欢
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        • 2017-08-22
        • 1970-01-01
        • 2015-04-28
        相关资源
        最近更新 更多