【问题标题】:Lamport Clock and state machineLamport 时钟和状态机
【发布时间】:2015-04-24 14:18:22
【问题描述】:

我正在阅读 Lamport 关于时钟和状态机的论文,有一点我不明白。 Lamport 说:“当一个进程知道了所有其他进程发出的所有时间戳小于或等于 T 的命令时,它就可以执行一个时间戳为 T 的命令。精确的算法是直截了当的,我们不会费心去描述它。 。”

算法很简单,但我其实没有...进程怎么知道没有更多的时间戳小于或等于要处理的消息的时间戳的传入消息?

所有进程在收到消息时都广播 ACK 可能会解决这个问题...因此,由于消息是有序的,因此在收到 ACK 后,进程就知道没有具有较低时间戳的传入消息...但是这个看起来不像“一个简单的算法”。

希望我已经足够清楚了。

【问题讨论】:

    标签: messaging distributed-computing state-machine


    【解决方案1】:

    进程知道没有更多命令,因为/当它从每个其他进程接收到时间戳 >=T 的命令时。

    假设我们有一个进程 P1 从进程 P2 接收到一个时间戳为 T2 >= T 的命令。收到此命令后,进程 P1 立即获悉 所有 P2 发出的命令beforeconcurrent,其命令带有 T 时间戳。

    实际上 P1 可以了解所有中间命令,即使它们还没有收到(例如,P2 可以为每个发送的命令分配一个序号,所以 P1 会注意到数字的差距)。然后 P1 可以选择等待丢失的命令,或者如果它们在传输过程中丢失,则重新请求它们。

    所以要执行带有 T 时间戳的命令,进程 P1 必须等待,直到它从 每个 其他进程接收到时间戳 >=T 的 单个 命令 - 然后它可以等待for(或重新请求)所有缺少的中间命令并执行命令 T。

    【讨论】:

    • 好的,我明白了!当你发现它时,错过了“每一个”。这意味着我们最终可能会遇到很多延迟,等待其他进程发送时间戳 >= T 的消息,或者进程之间进行大量通信以确认每条消息。非常感谢!
    猜你喜欢
    • 2023-03-27
    • 2022-11-29
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多