FIFO缓存与LRU缓存的区别

14

非常抱歉,我的问题很简单。我只是想确保我正确理解了先进先出(FIFO)缓存模型,并希望有人能帮助我 :) 如果缓存已满,LRU缓存会删除最近最少使用的条目。如果需要释放空间,则FIFO删除先前添加的条目(?)(例如,如果'a'-'v'-'f'-'k'是缓存中的条目并且'a'是最旧的条目,则缓存将删除'a'如果它需要释放空间)。

我的理解是否正确?

3个回答

21

你说得对。

把FIFO想象成汽车通过一条隧道。最先进入隧道的汽车将会是第一个从另一边出来的。

把LRU缓存想象成清理车库。你会扔掉长时间没用过的物品,保留经常使用的物品。这种算法的进化(简单LRU的改进)是扔掉长时间未使用且不昂贵的物品,如果需要,可以替换它们。


1
FIFO相对于LRU的优势在于,在FIFO中,缓存命中不需要修改缓存。而在LRU中,每次缓存命中都必须将检索到的值重新定位到前面。我们在pyparsing的packrat解析重构中充分利用了FIFO缓存,只有少量的缓存未命中。 - PaulMcG
同意,不过如果缓存块很大,你可以将索引移动到缓存数据而不是数据本身。 - Eric J.

1
是的,LRU缓存基于缓存中对象的最近使用情况,但FIFO则基于对象被缓存的时间。

1

是的,没错。FIFO 意味着先进先出,即按照到达顺序(在这种情况下是删除)严格考虑元素。LRU 是最近最少使用,缓存中最长时间未被使用的元素将被驱逐(因为它可能不会很快被需要)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接