2013-03-26 278 views
4

我真的很抱歉這樣簡單的問題。我只是想確保我正確理解FIFO緩存模型,並且希望有人能幫助我解決這個問題:) LRU緩存會刪除最近訪問的條目(如果緩存已滿)。如果緩存需要空閒空間(例如,如果'a' - 'v' - 'f' - 'k'是緩存中的條目,並且'a'是最早的,則FIFO會刪除先前添加的條目(?)條目,那麼緩存將刪除'a',如果它需要空閒空間的話)。FIFO緩存vs LRU緩存

對嗎?

回答

7

你是對的。

將FIFO視爲汽車通過隧道。第一輛駛入隧道的車將成爲第一輛駛出對方的車。

將LRU緩存視爲清理車庫。你會扔掉你很久沒用過的物品,並保留你經常使用的物品。該算法的演變(對簡單LRU的改進)將扔掉長時間未使用的物品,並且如果您最終需要更換,則更換並不昂貴。

+0

FIFO優於LRU的優點是在FIFO中,緩存命中不需要修改緩存。在LRU中,每個緩存命中還必須將檢索到的值重新定位到前端。我們在pyparsing的packrat解析重新設計中充分利用了FIFO緩存,緩存未命中只有少量增加。 – PaulMcG 2017-03-29 13:12:37

+0

同意,但如果緩存的塊很大,則可以將索引移到緩存的數據而不是數據本身。 – 2017-04-02 17:49:12

0

是的,LRU緩存基於緩存中對象的最近使用,但FIFO基於對象被緩存的時間。

0

是的,這是正確的。 FIFO意味着先進先出,即考慮(在這種情況下刪除)元素嚴格按到達順序。 LRU是最近最少使用的,未使用最長時間的緩存元素被驅逐(據預測,它不會很快需要)。