第二篇:时间和全局状态(二)
目录
逻辑时间和时钟
逻辑时间
Lamport‘s 逻辑时钟
向量时钟
逻辑时间和时钟
1、事件顺序
- 如果 a 在 b 被定义为时间之前发生,那么系统必须包含真实时钟
- 即使系统包含真实时钟,同步也是不完美的
2、基于系统内可观察到的事件排序
- 内部的
- 发送
- 收到
逻辑时间
逻辑时间的想法是去表达顺序基于两个简单直观的点:
- 如果两个事件发生在同一个进程中,那么它们的发生顺序是进程观察到它们的顺序
- 每当进程间发送消息时,发送消息的事件发生在接收消息的事件之前
Happened-before 关系(->),发生在前的关系:
1、定义:
让a,b,c是三个事件,那么接下来的全局的发生在前的关系成立:
- HB1: 如果存在进程P,在进程p中a->b,那么a->p
- HB2:对于任何消息 m: a = send(m) ➝ b = receive(m)
- HB3:如果 a ➝ b 和 b ➝ c,则 a ➝ c
2、➝ 是部分有序
- 如果两个事件 a 和 b 发生在不同的进程中并且不交换消息,则 a 和 b 不按照 ➝ 排序, a ➝ b 和b ➝ a都不 成立
Lamport‘s 逻辑时钟
每个进程 pi 都有一个逻辑时钟 Li
- 每个进程都将其逻辑时钟初始化为零.
- LC1:
- Li 在进程 pi 的每个事件之前加 1
- LC2:
- 如果事件 a 由进程 pi 发送(m),则消息 m 包含一个
时间戳 t = Li (a)。 - 收到消息 m 后,进程 pj 设置 Lj := max(Lj, t) ,然后
应用 LC1 来说明接收(m)事件
- 如果事件 a 由进程 pi 发送(m),则消息 m 包含一个
遵守时钟条件:
- 对于任何事件 a, b:如果 a ➝ b 那么 L(a) < L(b)
根据 ➝ 的定义,如果持有以下条件,时钟条件会被满足:
- C1:如果 a, b 是进程 pi中的事件 并且 a ➝ b ,则 Li(a) < Li(b)
- C1满足LC1
- C2:如果 a 是在进程 pi 中发送消息,b 是在进程 pj 中接收该消息,则 Li(a) < Li(b)
- C2满足LC2
但是需要注意的是
1、L(a) < L(b) 并不意味着 a ➝ b
2、➝ 没有说明谁造成了什么
- 较早发生的事件并不意味着它是后来事件的原因
3、完全有序的逻辑时钟?
- 使用完全可以确定的,比如进程 id
向量时钟
对于具有 N 个进程的系统,进程 pi 处的向量时钟 Vi 是 N 个整数的数组
更新时钟的规则:
- VC1: 设置 Vi[j] = 0 for i, j = 1, 2, …, N
- VC2: 在 pi 给事件加时间戳之前,它设置 Vi[i] := Vi[i] + 1
- VC3:pi 在它发送的每条消息上搭载 t = Vi
- VC4: 当 pi 在消息中接收到 t 时,它设置 Vi[j] := max(Vi[j], t[j]),
对于 j = 1, 2,..., N(并使用 VC2 在下一个事件之前将 1 添加到它自己的元素)
向量时间戳比较
- V = V' 仅当 V [j] = V' [j] 对于 j = 1, 2, ..., N
- V <= V' 仅当 V [j] <=V' [j] 对于 j = 1, 2, ..., N
- V < V' 仅当 V <= V' 且 V != V'
a ➝ b 仅当 V(a) < V(b)
我们可以通过比较它们的时间戳来判断 2 个事件是并发的
- a || b 如果 V(a) <= V(b) 和 V(b) <= V(a)都不存在的话
上面说的可能第一次比较不好理解,给大家举个例子:
1、在 p1:a (1,0,0), b (2,0,0),然后在 m1 上搭载 (2,0,0)
2、在 p2:在收到 m1 时得到 max((0,0,0), (2,0,0)) = (2,0,0) 加 1
到自己的元素 = (2,1,0)
3、c|| e(平行)因为既不是 V(c) <= V(e) 也不是 V(e) <= V(c)
小结一下:
1、准确计时对于分布式系统很重要
2、时钟同步是可能的,尽管它们有漂移和消息延迟的可变性
3、时钟同步对于在不同计算机上对任意事件对进行排序并不总是实用的
4、happened before(发生前) 关系是事件的偏序,反映了它们之间的信息流
5、Lamport 时钟是根据事件之间的发生前关系更新的计数器
6、矢量时钟是对 Lamport 时钟的改进:两个事件按发生前排序或并发排序通过比较它们的向量时间戳
好了,逻辑时钟就讲到这里,辛苦大家观看,有问题欢迎随时评论探讨交流哈~
第二篇:时间和全局状态(二)相关推荐
- 第三篇:时间和全局状态(三)
目录 全局状态 全局状态 定义 Cut:截断/切分 全局状态 走向和线性化 快照 Chandy-Lamport 快照算法 假设 算法 初始化快照 复杂度 一致性:定理 一致性:证明 快照算法的可到达性 ...
- 第一篇:时间和全局状态
目录 介绍 时钟同步 假设 同步系统内部同步 异步系统的内部同步 伯克利算法 Berkeley 异步系统的外部同步 克里斯蒂安的算法 Cristian 网络时间协议 Network Time prot ...
- .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态
第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 本文是 ...
- C语言初阶第二篇:换我心,为你心,始知C语言 从程序调试到全网最详细字符串教学来喽
换我心,为你心,始知C语言 老铁们,我们这个系列的上一篇文章讲到了变量常量,那么今天我们就继续说一说之后的一些知识框架,保证零基础也能看懂,废话不多说,我们开始吧! 第二篇 一.探讨字符串 二.插入知 ...
- 【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第二篇:使用Animator控制跑酷角色的动画状态切换
文章目录 一.前言 二.制作一段跳.二段跳动画 三.编辑动画控制器 四.运行效果 一.前言 嗨,大家好,我是新发,今天是大年初二,大家牛年快乐,牛气冲天. 我打算写一篇使用Unity制作像天天酷跑一样 ...
- 数据包络分析-二阶段网络带feedback(第二篇)
数据包络分析-二阶段网络带feedback(第二篇) 模型示意图 第一点:投入分配 第二点:只需要用一个 C h a r n e s C o o p e r Charnes\;Cooper Charn ...
- SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇
SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇 笔者所在的项目上启用了ECM(Engineer Change Management)功能,重要数据的修改都要事先创建一 ...
- 进程通信之二 管道技术第二篇 匿名管道
上一篇<进程通信之二 管道技术第一篇 输入输出的重定向>示范了增加若干程序代码来完成程序输入输出的重定向,并提出了如果没有程序源代码,只有程序文件如何来完成重定向.本篇就介绍如何使用匿名管 ...
- 备考计算机国一国二的文章,2020国家电网计算机类第二篇:新大纲如何备考
原标题:2020国家电网计算机类第二篇:新大纲如何备考 [山西中公国企]今天小编给大家带来2020国家电网计算机类第二篇:新大纲如何备考.山西中公国企(sxgqzp)微信公众号为您持续导航~ 根据对近 ...
最新文章
- 5whys分析法在美团工程师中的实践
- angular4.0微信oAuth第三方认证的正确方式
- QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
- 谈谈有什么方法可以快捷实现多场景下的线程安全
- mysql 2100,MySQL 实现准实时的表级别DML计数
- 又一家知名社交电商平台倒下:并购重组失败,将启动破产清算或重整
- 让Salesforce用户管理变得更加容易的几种最佳实践
- 解决oracle11g连接失败 ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
- java设计模式工厂模式_Java中的工厂设计模式
- 用计算机玩吃鸡,W10电脑系统玩吃鸡游戏会卡顿怎么办
- 行为层JavaScript+jQuery
- 关于jmeter中编写shell脚本json的应用
- python大学生社团管理系统django548
- mysql use temporary_一次mysql 优化 (Using temporary ; Using filesort)
- 计算机音乐谱棠梨煎雪,天谕手游棠梨煎雪乐谱_棠梨煎雪乐谱代码分享_3DM手游...
- java打包成jar|执行jar包中的main方法
- Mac不休眠、恢复休眠的快捷设置
- 光伏并网柜中防孤岛保护装置起什么作用?
- 几何学五大公理_平面几何五大公理
- photoshop cs6 简体中文正式版下载