- 剖析Disruptor:為什么會這么快?(一)鎖的缺點
- 剖析Disruptor:為什么會這么快?(二)神奇的緩存行填充
- 剖析Disruptor:為什么會這么快?(三)偽共享
- 剖析Disruptor:為什么會這么快?(四)揭秘內存屏障
緩存行
為了簡化與RAM之間的通信,高速緩存控制器是針對數據塊,而不是字節進行操作的。
從程序設計的角度講,高速緩存其實就是一組稱之為緩存行(cache line)的固定大小的數據塊,其大小是以突發讀或者突發寫周期的大小為基礎的。
每個高速緩存行完全是在一個突發讀操作周期中進行填充或者下載的。
即使處理器只存取一個字節的存儲器,高速緩存控制器也啟動整個存取器訪問周期並請求整個數據塊。
緩存行第一個字節的地址總是突發周期尺寸的倍數。緩存行的起始位置總是與突發周期的開頭保持一致。
現代處理器有專門的功能單元來執行加載和存儲操作。
加載單元每個時鍾周期只有啟動一條加載操作;與加載操作一樣,在大多數情況下,存儲操作能夠在完整流水線化的模式中工作,每個周期開始一條新的存儲。
共享內存的並行計算,有可能會出現"偽共享"問題.
比如,兩個處理器各要訪問一個word,這兩個word卻存在於同一個cache line大小的區域里,
這時,從應用邏輯層面說,這兩個處理器並沒有共享內存,因為他們訪問的是不同的內容(不同的word)。
但是因為cache line的存在和限制,這兩個CPU要訪問這兩個不同的word時,卻一定要訪問同一個cache line塊,產生了事實上的“共享”。
顯然,由於cache line大小限制帶來的這種“偽共享”是我們不想要的,會浪費系統資源。