Java併發編程------CPU的多級緩存

        最近在學習Java併發編程,工作了幾年一直CRUD,平常也基本上遇見不大特別大的併發的場景和模塊,併發編程這塊一直比較薄弱,所以學習總結一下。

         至於什麼是CPU的一級緩存和多級緩存,相信只要度娘一搜就是一大把,這裏就不一一展開說明了,樓主主要是列舉幾個例子來理解一些這比較模糊的 CPU的MESI相關協議內

首先得知道CPU的MESI是什麼鬼,網上有很多圖各種圈圈畫着的,可以看看,覺得最重要的還是理解

M:modified被修改。該緩存行只被緩存在CPU的緩存中,並且是被修改過的,因此它與主存中的數據是不一致的,該緩存行的內存需要在某個時間點寫回主存,這個時間點是允許其他CPU讀取主內相應的內存之前。當這裏的值被寫回主存之後,該緩存行會變成E狀態。

E:exclusive獨享。該緩存行只被緩存在該CPU緩存中,是未被修改過的,與主存中數據一致的。這個狀態可以在任何時刻,當有其他CPU讀取該緩存行時,變成S狀態。當CPU修改該緩存行內容時,該狀態可以變成M狀態。

S:shared共享。該緩存行可能被多個CPU緩存,並且各個緩存的數據和主存的數據一致,當有一個CPU修改該緩存行的時候,其他CPU從該緩存行是可以被作廢的,變成I狀態。

I:invalid無效的。這個緩存是無效的,可能是其他CPU修改了該緩存。

當然最常見四種操作:

Local read:讀本地緩存(CPU的高速緩存cache)中的數據

Local write:將數據寫到本地的緩存(CPU的高速緩存cache)中

Remote read:將內存(主存)的數據讀取過來

Remote write:將數據寫回到主存中

接下來樓主列舉一些常見的例子來主要講述一下MESI這幾種狀態的變化

一般來說CPU都是多核處理器,不會出現單核情況,但是爲了方便理解還是列舉一個單核的圖

此處例子轉載  https://www.cnblogs.com/yanlong300/p/8986041.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章