一致性模型之Sequential Consistency

  Sequential Consistency的定义

  Sequential Consistency的精确定义来自于Leslie Lamport老哥(以后我们会多次提到他)。

  他本来是定义了基于共享内存的多CPU并行计算的一致性模型,但是也可以推广到分布式系统中,实际上多CPU并行计算也都可以认为是分布式系统。

  模型的定义是

  the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program

  放到分布式系统里,意思就是不管系统怎么运行,得到的结果就好像把所有节点的所有操作按照某个sequential order排序后运行,但是在这个sequential order顺序中,来自同一个节点的操作仍然保持着它们在节点中被指定的顺序。

  Sequential Consistency的例子

  Leslie Lamport老哥的说法一贯的佶屈聱牙,我们通过几个例子来看一下。图中从左向右表示物理时间,W(a)表示写入数据a,R(a)表示读出数据a。

  

  

  可以看出,这两个系统都不是很完美,但是它们的模型都可以看做Sequential Consistency,因为通过如下变换,总是可以自圆其说,也就是可以找到符合定义的sequential order。

  

  

  Sequential Consistency和硬件

  也许有人会问,同一个进程中保留操作顺序不是显而易见的么?实际上随着硬件技术,尤其是多核、多CPU技术的发展,一个CPU核心运行的进程,不一定能观测到另一个核心进程的操作顺序。

  在论文中,Leslie Lamport老哥举了这样一个例子,有一个互斥算法,要求两个进程不能同时执行临界区方法,a和b两个变量初始值为0。正常情况下,最多一个进程执行临界区方法。

  进程1执行序列如下:

  a = 1

  if (b!=0){

  临界区方法

  }

  进程2执行序列如下:

  b = 1

  if (a!=0){

  临界区方法

  }

  这个程序在多核CPU机器上运行时,有可能两个进程同时进入临界区。为什么呢?

  我们先看一下现代CPU的架构

  

  CPU一般具有多个核心,每个核心都有自己的L1 cache和L2 cache,cache之上还有Load Buffer和Store Buffer。写入时,处理器很有可能仅仅将数据写入Store Buffer,稍后再将Store Buffer中的数据统一写回cache,有可能再过一会儿才将cache的数据写回内存。同样,一个核心读取的数据说不定也已经被另一个核心修改过,只是它不知道而已。

  所以上述进程对a和b的赋值,很有可能没被对方感知。

  为了保证Sequential Consistency,Leslie Lamport老哥在论文中提出了两个要求:

  Each processor issues memory requests in the order specified by its program

  Memory requests from all processors issued to an individual memory module are serviced from a single FIFO queue. Issuing a memory request consists of entering the request on this queue.

  但是如果在硬件层满足Sequential Consistency,肯定会大大降低效率,所以一般这些工作就会交给上层的软件开发人员来做。

?

原文地址:https://www.cnblogs.com/qfjavabd/p/10938317.html

时间: 2024-10-14 08:30:02

一致性模型之Sequential Consistency的相关文章

内存一致性模型(Memory Consistency Models)

译注:计算机早已进入了多核时代,多核时代要求程序员能够编写并行的程序来充分发挥多处理器的功效.而编写并行/并发程序必须要对内存模型有所了解.因此本人特翻译了一篇有关内存模型综述性质的文章.初次翻译文章,错误在所难免,还望指教.原文地址:http://www.cs.nmsu.edu/~pfeiffer/classes/573/notes/consistency.html 注:有一个很好的关于内存一致性模型的教程在 ftp://gatekeeper.dec.com/pub/DEC/WRL/resea

内存一致性模型

Cache coherence 本文主要讨论的是内存一致性问题(memory consistency),和缓存一致性(cache coherence)是不同的.在<计算机体系结构:量化方法研究>第五章中,memory consistency是由cache coherence引出的,所以我们就先来说说cache coherence吧.考虑下图: 如图,A和B读取X到缓存后,A直写(write through)X的值为0,但此时B缓存中存储的X的值仍然是1.即如果此时B读取X,将会收到数值1! 通

存储一致性模型研究——Research of Memory Consistency Model

一致性模型: 所谓存储一致性模型(Memory Consistency Model),实际上是系统设计者与应用程序员之间的一种约定.如果应用软件遵从一定的规则访问虚内存系统,则应用软件可获得正确的存储访问结果:反之,若破坏约定的规则,则存储访问的正确性不受保证. 从某种意义上来讲,存储一致性模型对共享存储系统中多处理机的访存次序作了限制,从而对性能有影响.分布式共享存储系统(DSM)的一个根本目标就是让一个通过局域网连接起来的工作站集群,共享单一的分页虚地址空间,使在工作站集群之上运行程序的效果

一致性模型(consistency model)

比如下面的例子: 一行X值在节点M和节点N上有副本 客户端A在节点M上写入行X的值 一段时间后,客户端B在节点N上读取行X的值 一致性模型所要做的就是决定客户端B能否看到客户端A写的值.一致性模型分为一下几种模型: 随意一致性(causal consistency) delta一致性(delta consistency) entry一致性(entry consistency) 最终一致性(eventual consistency) 创建一致性(fork consistency) 原子一致性(at

Sequential Consistency一致性

掌握了Sequential Consistency一致性模型之后,我们重新审视一下java的并发. 我们已经说过,Sequential Consistency只保留进程本地顺序.上文中我们了解到,由于CPU指令重排序.内存多级缓存不一致等问题,硬件层次没有提供Sequential Consistency,需要软件开发人员实现.下面我们就来看一下,在java中如何实现Sequential Consistency. Java中Sequential Consistency的基础,是JVM的happen

深入浅析一致性模型之Linearizability

在Sequential Consistency之后,Linearizability出现了,它具有更强的一致性. Linearizability的官方定义是来自于<Linearizability: A Correctness Condition for Concurrent Objects>,相比于Sequential Consistency定义的简洁,它的定义可是非常详细,我们一起简要的看一下吧. history 一个并行系统的一个执行序列叫做一个history,由一系列的invocation

分布式系统中的概念--第一篇 一致性协议、一致性模型、拜占庭问题、租约

1,一致性协议 两阶段提交协议与Raft协议.Paxos协议 ①两阶段提交协议 在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败.当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等).因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与

Hadoop之HDFS之一致性模型

HDFS某些地方为了性能可能会不符合POSIX(是的,你没有看错,POSIX不仅仅只适用于linux/unix,Hadoop 使用了POSIX的设计来实现对文件系统文件流的读取),所以它看起来可能与你所期望的不同,要注意.     创建了一个文件以后,它是可以在命名空间(namespace)中可以看到的: Path p = new Path("p"); fs.create(p); assertThat(fs.exists(p), is(true)); 但是任何向此文件中写入的数据并不能

Sequential consistency

Sequential consistency is one of the consistency models used in the domain of concurrent computing (e.g. in distributed shared memory, distributed transactions, etc.). It was first defined as the property that requires that "... the result of any exe