““执行历史”不是第三种独立的形式对象,而是一个术语入口。本库把它分流到两页:观察对象接口时使用并发对象历史;描述进程、消息与配置演化时使用分布式执行。后续页面不应把本页作为直接前置,而应依赖…”
形式陈述 ​
设
其中
上述序列是某个调度给出的全序交错。由同一进程的事件顺序以及每条消息的发送—接收边生成 happens-before 因果偏序;不同的全序执行可以是同一因果事件结构的不同线性扩展。进程投影只保留该进程的局部事件和可见输入,接口投影则可产生 并发对象历史,两种投影都会丢失部分全局信息。
直觉 ​
分布式执行把“系统如何一步步演化”固定成配置图上的路径。全序不是说系统拥有可观测的全局时钟,而是分析者选择一种合法调度来枚举原子事件;因果偏序再剥离彼此独立事件之间偶然的排列。
配置记录某一时刻会影响未来的全部状态,事件记录造成变化的原因。只保留其中一边都会丢信息:裸事件列表需要初始状态才能重放,裸配置终点则无法说明中间经历了哪些消息和故障。
例子与边界 ​
进程
各机器日志按本地时间戳合并不一定得到合法执行:时钟漂移可能把接收排在发送之前,日志也可能遗漏内部或故障事件。无限执行是否属于算法承诺的范围,还要由公平性、消息可靠性和故障上界筛选;这些额外条件定义 可容许执行,不属于本条的裸路径合法性。
推论与应用 ​
安全性可对所有可达执行前缀量化,活性则通常只对满足公平环境假设的无限执行量化。配置不可区分性、因果序、调度对手、模型检查与 FLP 类不可能性证明都以分布式执行为对象。将执行投影到进程或接口,可连接局部知识、trace 语义和并发对象一致性。
参考资料
- Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996, Chapters 1–3.
- Hagit Attiya and Jennifer Welch, Distributed Computing, 2nd ed., Wiley, 2004, Chapters 2–3.