快取一致性協議mesi,是自動觸發的嗎,還是必須使用volatile或者同步鎖等才會觸發?

時間 2021-10-19 17:21:03

1樓:jacob

MESI是CPU的硬體機制,軟體、作業系統無法關閉或者開啟,也無法干涉,軟體開發人員可以利用cache的一些特性來提高軟體的效能,比如資料結構的Cache line對其等。

Cache是CPU的硬體機制,用於彌補記憶體和CPU之間的效能鴻溝。所以,CPU需要自己由的硬體邏輯確保軟體訪問的資料一致性,即Cache一致性協議。

通常,乙個CPU core需要使用乙個資料時,如果該資料也被其他Core使用,這時候需要到其他Core上的L1/L2 Cache確認是否有修改,如果有修改,則將更新到L3 Cache,然後取到L1/L2 Cache並使用。這個過程是自動完成的,軟體和作業系統無法干涉。

軟體的各種鎖都不會觸發這個過程,軟體的鎖是在軟體並行上控制臨界資源訪問的,從軟體層面確保資料的一致性。如果乙個core使用鎖改變了乙個變數的數值,另外乙個core使用鎖去修改這個變數時,Cache會確保該變數的一致性,將資料從乙個core的L1/L2 Cache同步到另外乙個core上。實際上,如果軟體不使用鎖,Cache的一致性過程仍然起作用。

只不過,鎖確保軟體不同執行緒順序訪問臨界資源。

Core間由Cache一致性協議導致的同步,會降低軟體的效能。需要同步的資料越多,效能降低也也大。所以,並行程式設計需要盡量避免core之間的資料同步,即避免不同core操作同乙個資料,最典型的就是統計資料,每個core都往同乙個變數累加資料。

這種統計問題,通常採用每個core統計自己的資料,只在需要時做全域性累加,比如查詢的時候,或者定時累加。

volatile只是告訴編譯器停止對指定的變數做優化。

2樓:白楊

自動觸發,volatile 只提供如下保證:

對宣告為 volatile 的變數進行的任何操作都不會被優化器去除,即使它看起來沒有意義(例如:連續多次對某個變數賦相同的值),因為它可能被某個在編譯時未知的外部裝置或執行緒訪問。

被宣告為 volatile 的變數不會被編譯器優化到暫存器中,每次讀寫操作都保證在記憶體(或快取,詳見下文)中完成。

在不同表示式內的多個 volatile 變數間的操作順序不會被優化器調換(即:編譯器保證多個 volatile 變數在 sequence point 之間的訪問順序不會被優化和調整)。

詳見本人小文:

多處理器環境和執行緒同步的高階話題

由上文可知,雖然 mesi 會自動觸發,但一般要確認觸發了 mesi 還是需要 volatile 的,否則無法避免編譯器各種優化和亂序。

另外,C++ 中的 volatile 不會自動加鎖。

3樓:與火同行

加上volatile的變數在多核cpu執行的時候才會觸發快取一致性協議

1.多核情況下,(硬體已支援mesi協議)所有的cpu操作都會涉及快取一致性(MESI)的校驗,只不過該協議是弱一致,不能保證乙個執行緒修改變數後,其他執行緒立馬可見。而volatile則可以保證可見性。

2.正常情況下,系統操作並不會進行快取一致性(MESI)的校驗;只有變數被volatile修飾了,該變數所在的快取行才被賦予了快取一致性(MESI)校驗的功能。

4樓:晨楓

自動觸發的,當CPU的乙個核需要寫入或讀取快取資料時,CPU所有核的快取會自動協調這個cacheline的狀態,達到滿足當前核讀取或寫入的要求

flink中一致性檢查點,這個一致性怎麼理解,是什麼和什麼一致,跟分布式中一致性演算法一樣嗎?

歡歌 從物理意義上,checkpoint 分布式快照是乙個有意義的系統狀態,但不一定對應某個時刻的狀態 沒法讓所有節點在同乙個時刻拍照 一致性的含義是 不違背事件間固有的因果關係,即如果系統裡面有兩個事件 e1 和 e2,且 e2 依賴於 e1,那麼快照不能只包含了 e2,但是卻沒有包含 e1。舉個...

如何評價一致性演算法 PacificA ?

辛塞凱諾卡密 有一點我覺比較爽,省去了集群自選舉的邏輯,把這件事交給Nameserver做,直接判斷PreparedList的完整性以及First Win即可。 laliliu 個人覺得PacificA沒有Paxos,Raft流行,可能跟msra沒有強力推廣也有關,另外,感覺PacificA有不少v...

關於kafka的一致性的疑問?

胡明 可以看一下這個 huxihx 說說我的淺見 kafka的old leader由於gc等原因soft fail的時候選舉了新的leader,那麼old leader回來時會發生什麼情況?如果broker因為某些原因 像你所說的long gc 導致與Zk的會話斷開,那麼依託於Zk的watch機制,...