mirror of
https://github.com/Vonng/ddia.git
synced 2025-01-05 15:30:06 +08:00
Update ch5.md
This commit is contained in:
parent
ee29a62ffc
commit
bed1d3f7bd
2
ch5.md
2
ch5.md
@ -635,7 +635,7 @@ LWW 实现了最终收敛的目标,但以 **持久性** 为代价:如果同
|
||||
* 在 [图 5-9](fig5-9.png) 中,两个写入不是并发的:A 的插入发生在 B 的递增之前,因为 B 递增的值是 A 插入的值。换句话说,B 的操作建立在 A 的操作上,所以 B 的操作必须有后来发生。我们也可以说 B 是 **因果依赖(causally dependent)** 于 A。
|
||||
* 另一方面,[图 5-12](fig5-12.png) 中的两个写入是并发的:当每个客户端启动操作时,它不知道另一个客户端也正在执行操作同样的键。因此,操作之间不存在因果关系。
|
||||
|
||||
如果操作 B 了解操作 A,或者依赖于 A,或者以某种方式构建于操作 A 之上,则操作 A 在另一个操作 B 之前发生。在另一个操作之前是否发生一个操作是定义什么并发的关键。事实上,我们可以简单地说,如果两个操作都不在另一个之前发生,那么两个操作是并发的(即,两个操作都不知道另一个)【54】。
|
||||
如果操作 B 了解操作 A,或者依赖于 A,或者以某种方式构建于操作 A 之上,则操作 A 在另一个操作 B 之前发生。一个操作是否在另一个操作之前发生是定义并发含义的关键。事实上,我们可以简单地说,如果两个操作都不在另一个之前发生(即,两个操作都不知道对方),那么两个操作是并发的)【54】。
|
||||
|
||||
因此,只要有两个操作 A 和 B,就有三种可能性:A 在 B 之前发生,或者 B 在 A 之前发生,或者 A 和 B 并发。我们需要的是一个算法来告诉我们两个操作是否是并发的。如果一个操作发生在另一个操作之前,则后面的操作应该覆盖较早的操作,但是如果这些操作是并发的,则存在需要解决的冲突。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user