內存一致性模型
編輯在計算機科學中,一致性模型規定了程序員和系統之間的契約,其中系統保證如果程序員按照規則對內存進行操作,內存將是一致的,讀取、寫入或更新內存的結果將是一致的。 可預見的。 內存一致性模型用于分布式系統,如分布式共享內存系統或分布式數據存儲(如文件系統、數據庫、樂觀復制系統或網絡緩存)。 一致性不同于一致性,一致性發生在有緩存或無緩存的系統中,并且是數據相對于所有處理器的一致性。 Coherence 處理維護全局順序,在該順序中,所有處理器都可以看到對單個位置或單個變量的寫入。 一致性處理與所有處理器相關的多個位置的操作順序。
高級語言(例如 C++ 和 Java)通過以保留內存語義的方式將內存操作轉換為低級操作、重新排序某些內存指令以及封裝所需的與庫調用(例如 pthread_mutex_lock())的同步來維護一致性契約。
例子
編輯假設發生以下情況:
一致性模型決定了客戶端 B 是否一定會看到客戶端 A 執行的寫入,肯定不會或不能依賴于看到寫入。
類型
編輯內存一致性模型定義更新的明顯順序和可見性的規則,并且在權衡的連續體上。 一致性模型的定義和分類有兩種方法; 問題和看法。
IssueIssue 方法描述了定義進程如何發出操作的限制。ViewView 方法定義了進程可見的操作順序。
例如,一致性模型可以定義在所有先前發出的操作完成之前不允許進程發出操作。 不同的一致性模型執行不同的條件。 如果一個一致性模型需要該模型的所有條件甚至更多,則可以認為它比另一個更強大。 換句話說,具有較少約束的模型被認為是較弱的一致性模型。
這些模型定義了硬件需要如何布局,以及在高層次上,程序員必須如何編碼。 所選擇的模型也會影響編譯器如何重新排序指令。 通常,如果控制指令之間的依賴關系以及對同一位置的寫入是有序的,則編譯器可以根據需要重新排序。 但是,對于下面描述的模型,有些模型可能允許重新排序加載前的寫入,而有些則不允許。
強一致性模型
編輯嚴格一致性
嚴格一致性是xxx的一致性模型。 在這種模型下,任何處理器對變量的寫入都需要被所有處理器立即看到。
嚴格模型圖和非嚴格模型圖描述的是時間約束——瞬時。 可以更好地理解,好像存在一個全局時鐘,其中每次寫入都應在該時鐘周期結束時反映在所有處理器緩存中。 下一個操作必須僅在下一個時鐘周期內發生。
這是最嚴格的模型。 在這個模型中,程序員每次都會收到預期的結果。 它是確定性的。 它的實際相關性僅限于思想實驗和形式主義,因為即時消息交換是不可能的。 它無助于回答對同一數據項的并發寫入中的沖突解決問題,因為它假定并發寫入是不可能的。
順序一致性
順序一致性模型是由Lamport(1979)提出的。 它是一種比嚴格一致性模型更弱的內存模型。 不必立即看到對變量的寫入,但是,不同處理器對變量的寫入必須以相同的順序被所有處理器看到。
如果任何執行的結果與數據存儲上所有進程的(讀取和寫入)操作都以某種順序執行的結果相同,并且每個處理器的操作按順序出現在該序列中,則滿足順序一致性 由其程序指定。 Adve 和 Gharachorloo,1996 定義了實現順序一致性的兩個要求; 程序順序和寫原子性。
- 程序順序:程序順序保證每個進程發出按其程序順序的內存請求。
- 寫入原子性:寫入原子性定義內存請求是根據單個 FIFO 隊列的順序提供服務的。
在順序一致性中,沒有時間或最近寫入操作的概念。 有一些操作交錯對所有進程都是相同的。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195970/