顺序一致性和静态一致性之间有什么区别?

17 consistency sequential

谁能解释一下顺序一致性和静态一致性之间的定义和差异?以最愚蠢的形式:|

我读过这个:执行的例子,它是顺序一致但不是静止一致的

但我无法理解顺序和静态一致性本身:(

小智 22

顺序一致性要求操作应按照每个程序中指定的顺序生效.基本上它在每个单独的流程中强制执行程序顺序,并允许所有流程假设它们遵守相同的操作顺序.假设我们有2个进程在队列中排队和出列项q:

P1 -- q.enq(x) ----------------------------- 
P2 -------------- q.enq(y) ---- q.deq():y --
Run Code Online (Sandbox Code Playgroud)

这不是FIFO队列的预期行为.我们期望将队列出队,因为P1 x在P2排队之前排队y.但是,在顺序一致性模型中允许这种情况,因为顺序一致性不要求所有进程看到的顺序是正确的(实时顺序).有至少一个顺序执行的,可以解释这些结果,一个是:

P2:q.enq(y) P1:q.enq(x) P2:q.deq():y
Run Code Online (Sandbox Code Playgroud)

在此执行中,每个进程按程序顺序执行操作,这意味着每个进程按照它们在每个进程中指定的顺序执行其操作.

静态一致性要求非重叠操作看起来按实时顺序生效,但重叠操作可能会重新排序.因此,静态一致性模型中不允许使用相同的方案,因为我们希望q.enq(x)之前看起来生效q.enq(y),而不是q.deq()返回.静态一致性不一定保留程序顺序.如果并且将是并发(重叠)操作,它们可以被重新排序并且将是静止一致的.xyq.enq(x)q.enq(y)q.deq():y

基本上,一些执行顺序一致但不是静止一致,反之亦然.


小智 2

首先您应该了解什么是程序顺序,从字面上看,它是您期望程序按照指令出现的顺序运行的方式。

但是程序顺序仅适用于单线程程序,如果您有多线程,那么问题就来了,因为程序顺序可能不成立甚至不存在,因为有时您无法判断哪个线程的方法调用先发生。

静态一致性描述了所有线程行为的清晰的程序顺序。这是不允许重叠的,因为两个方法调用之间需要有一个静止期。

顺序一致性允许重叠,但要求人们可以找到一种程序顺序,在该顺序中,所有方法调用都可以放置在一个位置,并且仍然返回正确的值并表现正确。