2013-06-04 103 views
4

我知道,在順序一致性中,所有進程都必須按順序處理。例如:因果一致性與順序一致性有何不同?

Process 1  Process 2 
x = 1   z = 5 
y = 2   p = 3 

因此,我們可以得到X = 1,Z = 5,Y = 2,P = 3或Z = 5,P = 3,X = 1,Y = 2。但是重要的是,只有在執行z之後才能執行p等,是正確的?

因果一致性呢?我沒有看到任何區別。任何草圖,或在JAVA或C代碼將是偉大的。謝謝。

+2

區別在這裏解釋:http://en.wikipedia.org/wiki/Causal_consistency。 –

+0

你的理解看起來不錯,但你的措辭有些偏離,所以我不確定你是否真的明白。所有進程都不需要按**順序處理。所有必須發生的事情是,最終結果與以* some *次序執行的操作相同,並且每個單獨進程的操作按照與每個此類進程相關的代碼指定的次序出現。有很大的不同。所以是的,'p = 3'只能在'z = 5'之後。 –

+0

@OliCharlesworth這是非常困難的措辭...一個例子將是偉大的... –

回答

3

順序一致性所有的存儲器操作出現到所有節點出現在一定的順序。

因此,在您的示例進程1,2,和3都將以相同的順序看到內存操作。 (有用於4個操作6名可能的順序,但所有的方法將在該順序是什麼同意。)

因果一致性流程1,2和3可都觀察這些寫入以不同的順序發生。有兩條規則:

  1. 每個人都同意,過程我的寫作發生在我做他們的過程相同的順序。
  2. 如果任何進程讀取了一個位置x並獲取由不同進程寫入的值j,則所有線程都同意進程j寫入位置x在進程i讀取位置x之前。

因爲在你原來的例子有沒有讀操作,那麼有可能,例如,用於處理1至認爲,寫發生在順序x=1, y=2, z=5, p=3同時處理2認爲,寫發生在順序z=5, p=3, x=1, y=2過程3認爲他們發生的順序爲z=5, x=1, p=3, y=2

paper that the Wikipedia page points to給出了一些更有趣的例子(涉及讀取)。

因果記憶本身似乎不是很有用。在後面的文章中,他們展示瞭如何實現某種類似於具有因果記憶(和輔助進程)的障礙,但是提到似乎沒有任何方便的方式來實現關鍵部分。

所以他們最終會做什麼弱一致版本一致回憶做,並添加同步原語,這就需要將順序一致。

+1

有用與否,對因果一致性的一些興趣來自一個證明,即要求不僅僅是因果一致性犧牲分佈式系統中的一個或多個可用性和性能 - http://www.cs.utexas.edu/users/ princem/papers/cac-tr.pdf說 - 具體而言,在具有遺漏失敗和不可靠網絡的異步 模型中,我們顯示了以下緊密的界限:沒有一致性 比實時因果關係一致性(RTC)始終可用,單向會聚系統和RTC可以在始終可用的單向會聚系統中提供。 – mcdowella

+0

你說得對。我忘記了分佈式系統。我的背景(偏執?)是在同一塊主板上只有100個核心的系統中,假設系統在當且僅當每個部件都在工作時才工作。通過真正的分佈式系統,權衡是完全不同的。 –