CPU 的術(shù)語介紹
內(nèi)存屏障
: memory barriers
一組處理器指令鼓蜒、用于實(shí)現(xiàn)對內(nèi)存操作的順序限制
緩沖行
: cache line
cpu高速緩沖中可以分配的最小存儲單位
處理器填寫緩沖行時(shí)募判、會加載整個(gè)緩存行阶牍、現(xiàn)代CPU需要執(zhí)行幾百次CPU指令
原子操作
: atomic operations
不可中斷的一個(gè)或者一系列操作
緩沖行填充
: cache line fill
當(dāng)處理器識別到從內(nèi)存中讀取的操作數(shù)是可緩存的,
處理器讀取整個(gè)高速緩存行到適當(dāng)?shù)木彺?L1,L2,L3或者所有)
緩存命中
: cache hit
如果進(jìn)行高速緩存行填充操作的內(nèi)存位置仍然是下次處理器訪問的
地址時(shí)、處理器從緩存行讀取而不是從內(nèi)存讀取
寫命中
: write hit
當(dāng)處理器將操作數(shù)寫回到內(nèi)存緩存時(shí)雾消、會先檢查這個(gè)緩存的內(nèi)存地址
是否在緩存行中旨涝、如果存在一個(gè)有效的緩存行套媚、處理器會將這個(gè)操作數(shù)歇會到緩存、而不是內(nèi)存
寫缺失
: write misses the cache
一個(gè)有效的緩存行被寫入到不存在的內(nèi)存區(qū)域
比較并交換
: Compare and Swap
cas操作需要兩個(gè)值, old and new扮碧、在操作期間會比較這
兩個(gè)值趟章、如果發(fā)生變化則不交換、未發(fā)生變化才交換
CPU流水線
: CPU pipeline
在CPU中由5慎王、6個(gè)不同的電路單元組成一條指令處理流水線
然后一條X86指令分成5~6步后再由這些電路單元分別執(zhí)行蚓土、就能實(shí)現(xiàn)在一個(gè)CPU周期內(nèi)完成
一條指令、提高CPU的運(yùn)算速率
內(nèi)存順序沖突
: memory order violation
一般是由假共享引起的赖淤、是指多個(gè)CPU同時(shí)修改
同一個(gè)緩存行的不同部分而引起其中一個(gè)CPU的操作無效蜀漆、當(dāng)出現(xiàn)這個(gè)內(nèi)存順序沖突時(shí)、CPU必須清空流水線
Lock前綴的指令
lock 前綴的指令咱旱、在多核處理器下會引發(fā)兩件事:
1. 將當(dāng)期處理器的緩存行數(shù)據(jù)寫回內(nèi)存
2. 這個(gè)寫回內(nèi)存操作會使在其它CPU里緩存了該地址的數(shù)據(jù)無效
volatile的實(shí)現(xiàn)
為了提高速度确丢、CPU不直接和內(nèi)存通信、而是先將系統(tǒng)內(nèi)存的數(shù)據(jù)加載到內(nèi)存緩存后再操作
但: 操作完全不知道何時(shí)會被寫回內(nèi)存
volatile聲明的變量進(jìn)行讀寫吐限、JVM會向處理器發(fā)送一條Lock前綴的指令鲜侥、精講變量所在的
緩存行數(shù)據(jù)寫回到內(nèi)存
在多核處理器下、實(shí)現(xiàn)了緩存一致性協(xié)議诸典、每個(gè)處理器通過嗅探在總線上傳播的數(shù)據(jù)來檢查
自己的緩存是否已過期描函、當(dāng)處理器發(fā)現(xiàn)自己緩存行對應(yīng)的內(nèi)存地址唄修改、會將當(dāng)期處理器的
緩存行狀態(tài)設(shè)為無效狐粱、重新從系統(tǒng)內(nèi)存讀取