即使在阅读了维基百科文章并接受了答案后,我也无法理解 belady 异常。写完痕迹后,我有点明白了。在这里,我想分享一下我的理解。
理解belady异常的关键。
- 与 LRU 不同,FIFO 只是推出最旧的元素,而不考虑频率。因此,在 FIFO 中停留的时间越长,就意味着成为驱逐的受害者。
从这里开始,我将 3 页和 4 页 FIFO 队列称为 FIFO3 和 FIFO4。
为了理解维基百科的例子,我把它分成了两部分。当 FIFO3 赶上 FIFO4 和 FIFO3 超过 FIFO4 时。
FIFO3 如何在 9 日赶上 FIFO4
查看两个 FIFO 中的 3。在 FIFO3 中,3 在 4 日被驱逐并在 5 日返回。所以它在 8 日仍然存在并且缓存命中发生了。在 FIFO4 中,3 在第 5 次命中,但是这个缓存命中使 3 停留更长时间并在第 7 次被驱逐,就在第 8 次的下一个 3 之前。
2 与 3 相同。第二个 2(6th) 是 FIFO3 上的 MISS 和 FIFO4 上的 HIT,但第三个 2(9th) 是 FIFO3 上的 HIT 和 FIFO4 上的 MISS。这样想可能会有所帮助。在 FIFO3 上,3 于 5 日更新,因此停留时间更长,直到 8 日。在 FIFO4 上,3 是旧的,并在 7 号被驱逐,就在下一个 3 到来之前。
FIFO3 如何超越 FIFO4
因为 FIFO4 的 8、9 有 2 次缓存未命中,所以 FIFO4 中的 4 被下推并在 11 日被驱逐。FIFO3 12 号仍然保留 4,因为 8 号、9 号有缓存命中,所以 4 没有被下推。我认为这就是为什么维基百科的文章说“Penny Wise, Pound Foolish”
结论
FIFO 是一种简单朴素的算法,不考虑频率。通过将 LRU(最近最少使用)应用于 Wikipedia 的示例,您可能会得到更好的理解。在 LRU 中,4 优于 3。