Simplified 2Q
Simplified 2Q
如果訪問的數據P在Am中命中,將他放回到Am的Rear中,如果在A1命中,則將其從A1中移除,放入到Am中。
如果在A1和Am中都沒有命中,則優先使用兩個隊列的空閑空間,將其放入A1的Rear端;如果沒有剩余空間,則檢查A1的Threshold,超過的話從A1的Front移除就數據,若沒有超過,則從Am的Front端移除數據,新數據放入A1的Rear
Full Version2Q
2Q
Simplified 2Q的Threshold參數至關重要,這個參數過大或過小都無法合理平衡A1和Am的負載,尤其是當程序的數據模型變化時,這個值需要隨著變化,這使得Cache的空間很難被合理使用,因此有了Full version 2Q來解決這個問題。
Full vision 2Q將A1分解成A1-in和A1-out兩個隊列,其中Kin為A1-in的閾值,Kout為A1-out的閾值。在A1-in和A1-out中不再保存數據,而是存放數據指針,這樣Am可以使用所有的Slot,在一定程度上解決了適配性的問題
LRU算法都是居于Link list來實現的,數據從Front取出放回到Rear的過程是一個鏈表的替換過程,操作不算復雜,但是替換過程伴隨著多處鏈表遍歷,這個時間是不可忽略的。