LRU最近最少淘汰演算法

2021-08-15 11:05:08 字數 1318 閱讀 1532

lru (least recently used,最近最少使用)

最常的實現就是使用乙個鍊錶來儲存快取資料,最常用在例如:

最近閱讀:。。。。

。。。。

。。。。

經常訪問的** 。。。。

。。。。

。。。。

等等等!

其核心的思想就是「如果資料最近被訪問過,那麼將來被訪問的機率也會更高!」

上張圖來看下其儲存資料的是想!

1.將資料插入到鍊錶的頭部

2 每當快取資料被訪問時(快取命中),則將資料移動到鍊錶的頭部

3 當鍊表裝滿的時候,將尾部的資料丟棄!

當資料存在熱點時(也就是有幾條資料頻繁被訪問)lru的效率很好!但是在偶發性的,週期性的批量操作會導致lru的命中率急速

下降,快取汙染的情況比較嚴重!

lru-k

lru-k中的k代表最近使用的次數!lru-k主要是為了解決lru的汙染快取問題!其核心思想就是講最近使用過1次的資料擴充套件到最近使

用過k次的資料!

相比之下,lru-k比lru多維護乙個佇列,用於記錄快取資料被訪問歷史!只有當快取資料達到k次的時候才將資料放入到快取

當中。需要淘汰時,lru-k會淘汰掉第k次訪問時間距離當前時間最長的資料。

1.資料第一次被訪問,加入到訪問歷史列表

2 如果資料在訪問歷史列表裡面沒有達到k次訪問次數,則按照fifo進行淘汰 3 當訪問歷史佇列中的資料訪問次數達到k此以後,將資料索引從歷史佇列刪除,將資料移到快取佇列中,並快取此資料,快取佇列重新按照時間排序。 4 快取佇列中的資料被再次訪問後,重新排序 5 需要淘汰資料時,淘汰掉快取佇列中排在末尾的資料,既:淘汰掉快取中訪問時間裡現在最久的資料。lru-k具有lru的優點,同時能夠避免lru的缺點,實際應用中lru-k時綜合各種因素後的最優選擇,lru-3或許有更大的k中命中率,但適應性差,需要大量的資料訪問才能將歷史訪問記錄清楚掉!

分析:lru-k

命中率:lru-k降低了「快取汙染」帶來的問題,命中率比lru要高

複雜度:lru-k佇列是乙個優先順序佇列,演算法複雜度和代價比較高

代價:由於lru-k還需要記錄哪些被訪問過,但是還沒有放入快取的物件,因此記憶體消耗會比lru更多!當資料訪問量很大的時候,記憶體消耗會比較可觀!

lru-k需要基於時間進行排序(可以需要淘汰時在排序,也可以及時排序)cpu消耗比lru更高!

LRU 最近最少使用淘汰演算法 基本實現

計數器法 特殊棧法 暫存器法 下面給出,棧法的簡單演示實現 1 include 2 using namespace std 34 void conduct int size,int num,int a 100 處理函式 5void print int a,int num 輸出函式67 intmain...

如何實現LRU(最近最少使用)快取淘汰演算法?

我們維護乙個有序單鏈表,越靠近鍊錶尾部的結點是越早之前訪問的。當有乙個新的資料被訪問時,我們從煉表頭開始順序遍歷鍊錶。如果此資料之前已經被快取在鍊錶中了,我們遍歷得到這個資料對應的結點,並將其從原來的位置刪除,然後再插入到鍊錶的頭部。如果此資料沒有在快取鍊錶中,又可以分為兩種情況 如果此時快取未滿,...

LRU 最近最少使用頁面置換演算法 淘汰演算法

lru 最近最少使用頁面置換演算法 淘汰演算法 什麼是lru演算法?lru是least recently used的縮寫,即最近最少使用頁面置換演算法,是為虛擬頁式儲存管理服務的。關於作業系統的記憶體管理,如何節省利用容量不大的記憶體為最多的程序提供資源,一直是研究的重要方向。而記憶體的虛擬儲存管理...