1. 程式人生 > >一致性專題之cpu快取一致性(三)

一致性專題之cpu快取一致性(三)

本篇聊聊熟悉了cpu快取一致性對程式設計有什麼幫助。

1、資料對齊訪問

     在一致性專題之cpu快取一致性(一)中強調過先將要讀寫的資料當成1個位元組。這是因為對於short、int、long、以及小陣列而言可能會跨2個cache line,這樣cpu在讀寫時就要涉及到2個cache line,很明顯這是低效的。至於這個問題在實際中如何解決,準備再單獨寫一篇關於java的解決方案。

2、保持資料空間區域性性

     在前面的資料空間區域性性帶來的效率差異測試中已經給出了測試結果,它說的是儘量將相鄰的資料放在一個cache中並且按照連續空間進行訪問。

3、多執行緒程式設計時避免偽共享

    在前面的java併發程式設計專題---偽共享中也給出了測試結果,它說的是在業務上沒有資料競爭,但是在cpu底層執行時由於各自讀寫的資料在同一個快取行中,從而導致大量的cache miss影響了執行效率。這裡對文中使用volatile關鍵字再做個補充說明,對於java而言如果沒有volatile關鍵字,由於變數之間沒有競爭,即使在同一個快取行中,各執行緒也只讀寫各自變數的快取副本,這是由jvm的特性決定的。當加了volatile關鍵字就是要讓資料與記憶體同步,如果各自讀寫的變數在同一個快取行中,這個時候就可以用MESI快取一致性原理來解釋了,因為當本核的cache line有資料更新時,其它核中的cache line就是被置為無效,所以導致頻繁的cache miss。這種情況具體參考

一致性專題之cpu快取一致性(二)中當資料所在cache line處於M狀態時的