Skip to content

向量时钟

Vector clock

用每进程计数向量在标准消息传递模型中精确刻画事件因果偏序。

形式陈述

在含 n 个进程的标准消息传递模型中,每个进程 i 维护初始为全零的向量 ViNn。本地或发送事件前递增自身分量;消息携带向量;进程 i 收到向量 W 时先取逐分量最大值,再递增自身分量:

Vimax(Vi,W),Vi[i]Vi[i]+1.

定义 uv 为逐分量不大于,u<vuvuv。对事件时间戳 V(a),V(b),在该模型及规则下

abV(a)<V(b).

两个向量不可比当且仅当相应事件并发。

直觉

向量的第 j 个分量记录当前事件已知的进程 j 历史进度。逐分量比较因而能判断一份因果知识是否完整包含另一份,而单个整数只能保序、不能反推因果。

例子与边界

V(a)=(2,0)V(b)=(0,3),二者不可比,表示并发;若 V(c)=(2,4),则前两者都先于 c。精确等价依赖固定进程身份、可靠事件规则和标准 happened-before 模型;动态成员、压缩时钟或共享内存变体需重新陈述保证。

推论与应用

向量时钟用于因果广播、版本向量、冲突检测和分布式调试。其主要代价是时间戳通常含每个进程一个分量,即 Θ(n) 空间;稀疏表示和矩阵时钟在不同工作负载下作进一步权衡。

参考资料
  • Friedemann Mattern, “Virtual Time and Global States of Distributed Systems,” in Proceedings of the Workshop on Parallel and Distributed Algorithms, 1989, pp. 215–226,Full paper。
  • Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996,Ch. 6。