每日一個知識點系列的目的是針對某一個知識點進行概括性總結,可在一分鍾內完成知識點的閱讀理解,此處不涉及詳細的原理性解讀。
img
看圖說話
關鍵點1: 總線嗅探器(MESI 緩存一致性原理 )
關鍵點2: 總線鎖、緩存鎖,為了解決並發問題,會在內存區域的值加鎖(內存鎖),是在store 之前會給總線內的值加一個鎖,write 完成后在解鎖(這里大部分是緩存行鎖的,總線鎖看情況)。
關鍵點3:
就是為了使一個CPU上運行的線程能夠讀取到另外一個CPU線程的共享變量更新。這個CPU必須先根據無效化隊列中存儲的消息,刪除相應高速緩存內的數據副本,從而在其他CPU更新共享變量時能通過緩存一致性協議同步到該CPU的高速緩存中。內存屏障中的加載屏障 (Load Barrier)就是用來解決這個問題的。Load Barrier會根據會根據無效化隊列內容的內存地址,將其他CPU上使用了該緩存的高速緩存中對應的數據狀態標記為I,從而使用該CPU后續針對這個的讀操作時必須先發送Read消息,以將其他處理器對相關共享變量所做的更新同步到該處理器的高速緩存中。
總結:
當修改了增加volatile 的變量時,會馬上將變量值寫回到主內存中,這時會在store 前對主內存的這個變量加鎖,在store 通過總線的時候觸發MESI緩存一致性協議,通過總線嗅探器將其他cpu工作內存中的此變量置為無效狀態(涉及內存屏障)。當次cpu 完成變量的write 操作時,在對變量進行解鎖。
書籍:
推薦一本非常好的關於這方面的書籍,一本書幫你掃平多線程內容,掃碼回復暗號獲取:01
往期推薦
Spring Boot 知識清單(一)SpringApplication