首頁 >常見問題 >lru和lfu演算法的差別是什麼

lru和lfu演算法的差別是什麼

青灯夜游
青灯夜游原創
2021-05-07 15:35:5918521瀏覽

區別:LRU是最近最少使用頁面置換演算法,淘汰最長時間未被使用的頁面;而LFU是最近最不常用頁面置換演算法,淘汰一定時期內被訪問次數最少的頁。 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn