第二篇:时间和全局状态

Posted flying_1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二篇:时间和全局状态相关的知识,希望对你有一定的参考价值。

目录

逻辑时间和时钟

逻辑时间

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, 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 时钟的改进:两个事件按发生前排序或并发排序通过比较它们的向量时间戳

好了,逻辑时钟就讲到这里,辛苦大家观看,有问题欢迎随时评论探讨交流哈~

以上是关于第二篇:时间和全局状态的主要内容,如果未能解决你的问题,请参考以下文章

第二篇:线程七种状态

PLC状态机编程第二篇-负载均衡

ATK&CK1红队评估实战靶场Vulnstack之第二篇web漏洞

ATK&CK1红队评估实战靶场Vulnstack之第二篇web漏洞

React核心概念-第二篇

第二篇:python基础之数据类型与变量