2013-03-26 273 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是最近最少使用的,未使用最长时间的缓存元素被驱逐(据预测,它不会很快需要)。