首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >顺序一致性和静态一致性有什么区别?

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

Stack Overflow用户
提问于 2014-09-28 21:14:49
回答 2查看 8.6K关注 0票数 24

有人能解释一下的定义以及顺序一致性和静态一致性之间的区别吗?以最愚蠢的形式:

我读过这样的文章:Example of execution which is sequentially consistent but not quiescently consistent

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

EN

回答 2

Stack Overflow用户

发布于 2016-08-11 14:34:03

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

代码语言:javascript
复制
P1 -- q.enq(x) ----------------------------- 
P2 -------------- q.enq(y) ---- q.deq():y --

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

代码语言:javascript
复制
P2:q.enq(y) P1:q.enq(x) P2:q.deq():y

在这个执行过程中,每个进程按照程序顺序执行操作,这意味着每个进程按照在每个进程中指定的顺序执行其操作。

静态一致性要求不重叠的操作以其实时顺序显示生效,但重叠操作可能会被重新排序。因此,在静态一致性模型中不允许使用相同的场景,因为我们期望q.enq(x)q.enq(y)之前生效,而q.deq()则返回x而不是y。另外,静态的一致性并不一定能保持程序的顺序。如果q.enq(x)q.enq(y)是并发(重叠)操作,它们可以被重新排序,q.deq():y将保持安静一致。

基本上,有些执行是顺序一致的,但不是平静一致的,反之亦然。

票数 30
EN

Stack Overflow用户

发布于 2014-10-23 01:31:50

首先,你应该明白什么是程序顺序,这就是你期望你的程序按照指令的顺序运行的方式。

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

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

顺序一致性允许重叠,但需要找到一个程序顺序,其中所有的方法调用都可以放在一个位置,但仍然返回正确的值并正确运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26089729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档