Skip to content

逻辑时钟

Logical clock · Lamport clock

为事件赋整数时间戳并保证因果先后蕴含时间戳递增。

条目类型
模型

形式陈述

Lamport 逻辑时钟为每个事件 a 赋整数 C(a),满足时钟条件

abC(a)<C(b),

其中 是 happens-before 关系。典型实现中,每个进程在本地事件前递增计数器;发送消息携带当前值;接收带时间戳 t 的消息时令

Cmax(C,t)+1.

(C(a),pid(a)) 的字典序可扩张为事件全序,但附加的进程编号顺序不表示因果。

直觉

逻辑时钟不测量物理秒数,而是把因果偏序嵌入自然数,为因果先后安排一致的编号:进程每发生事件就递增,接收消息时跳到本地值和消息值的较大者之后。若一个事件可能影响另一个事件,编号必然递增;但它刻意不追求反向,因为一个标量无法编码所有并发维度,彼此无关的事件也可能恰有不同编号。因此,时间戳大小只能提供因果关系的必要线索,其价值是在不依赖同步物理时钟的情况下生成与因果一致的排序键。

例子与边界

P 的本地时钟为 3 时发送消息,消息携带 3Q 接收前为 7,接收后设为 max(7,3)+1=8。因此发送事件时间小于接收事件时间。两个互不通信的进程也可能分别产生时间戳 59,但不能由 5<9 推出前者导致后者。

这说明 C(a)<C(b) 的逆命题一般不成立,只比较标量时间戳不能精确判断并发。逻辑时钟也不保证与真实墙钟接近,网络延迟和时钟漂移不是其目标。把进程 ID 作为次关键字可把 (C(e),pid) 排成总序,适合确定性日志展示;但这个总序包含人为打破的并发关系,不能替代因果分析。时钟整数溢出、进程重启和持久化则属于实现层问题,理论模型通常假设无界自然数。

推论与应用

Lamport 时钟由 Happens-before 关系 导出,并使用 自然数 作为标量标签,为因果偏序提供保序嵌入。若应用需要判断两个事件是否真正并发,应转向 向量时钟 等更丰富的结构;若只需构造与因果相容的全局排序,Lamport 时间戳加稳定 tie-break 已足以支持因果一致的事件排序、日志重放、分布式互斥与复制协议。

参考资料
  • Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996,Ch. 6。
  • Leslie Lamport, “Time, Clocks, and the Ordering of Events in a Distributed System,” Communications of the ACM 21(7), 1978,Full paper, §§1–3。
关系图谱6 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

并列辨析