區別:LRU是最近最少使用頁面置換演算法,淘汰最長時間未被使用的頁面;而LFU是最近最不常用頁面置換演算法,淘汰一定時期內被訪問次數最少的頁。 LRU關鍵是看頁面上一次被使用到發生調度的時間長短;而LFU關鍵是看一定時間內頁面被使用的頻率。
本教學操作環境:windows7系統、Dell G3電腦。
對於web開發而言,快取必不可少,也是提高效能最常用的方式。無論是瀏覽器快取(如果是chrome瀏覽器,可以透過chrome:://cache查看),或是服務端的快取(透過memcached或redis等記憶體資料庫)。快取不僅可以加速用戶的訪問,同時也可以降低伺服器的負載和壓力。那麼,了解常見的快取淘汰演算法的策略和原理就顯得特別重要。
常見的快取演算法
- LRU (Least recently used) 最近最少使用,如果資料最近被訪問過,那麼將來被訪問的幾率也更高。
- LFU (Least frequently used) 最不常使用,如果一個資料在最近一段時間內使用次數很少,那麼在將來一段時間內被使用的可能性也很小。
- FIFO (Fist in first out) 先進先出, 如果一個資料先進入快取中,則應該最早淘汰掉。
LRU快取
像瀏覽器的快取策略、memcached的快取策略都是使用LRU這個演算法,LRU演算法會將近期最不會訪問的數據淘汰掉。 LRU如此受歡迎的原因是實現比較簡單,而且對於實際問題也很實用,良好的運行時性能,命中率較高。以下談談如何實作LRU快取:
- 新資料插入到鍊錶頭部
- 每當快取命中(即快取資料被存取) ,則將資料移到鍊錶頭部
- 當鍊錶滿的時候,將鍊錶尾部的資料丟棄
LRU Cache所具備的操作:
# #set(key,value):如果key在hashmap中存在,則先重置對應的value值,然後取得對應的節點cur,將cur節點從鍊錶刪除,並移動到鍊錶的頭部;若果key在hashmap不存在,則新建一個節點,並將節點放到鍊錶的頭部。當Cache存滿的時候,將鍊錶最後一個節點刪除即可。 - get(key):如果key在hashmap中存在,則把對應的節點放到鍊錶頭部,並傳回對應的value值;如果不存在,則傳回-1。
-
LRU和LFU的差別:
LRU是最近最少使用頁面置換演算法(Least Recently Used),也就是先淘汰最長時間未被使用的頁面!
LFU是最近最不常用頁面置換演算法(Least Frequently Used),也就是淘汰一定時期內被訪問次數最少的頁!
例如,第二種方法的時期T為10分鐘,如果每分鐘進行一次調頁,主存區塊為3,若所需頁面走向為2 1 2 1 2 3 4
注意,當調頁面4時會發生缺頁中斷
若按LRU演算法,應換頁面1(1頁面最久未被使用) 但按LFU演算法應換頁面3(十分鐘內,頁面3只使用了一次)
總結
可見LRU關鍵是看頁面最後一次被使用到發生調度的時間長短;
而LFU關鍵是看一定時間內頁面被使用的頻率!
更多相關知識,請造訪
常見問題欄位!
以上是lru和lfu演算法的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!