最近在学习LFU与LRU缓冲算法时对于其怎样对数据进行存储遇到了障碍,想上网查找例子方便理解,但又找不到好的文章。研究了一些问题之后,算是弄懂了其中的原理,在此与各位分享。
LFU算法(最不频繁使用法):LFU记录缓冲池中每个缓冲区的访问次数。当需要一个缓冲区重新存储新信息时,被访问次数最少的缓冲区被认为是包含“最不重要的”信息,接下来就使用这个缓冲区。
LRU算法(最近最少使用法):LRU简单地把缓冲区放到一个链表中。每当访问了一个缓冲区中的信息时,就把这个缓冲区放到链表的最前端。当需要读取新信息时,使用链表最后面的缓冲区(最近最少使用的缓冲区),根据需要丢弃其中“老”信息或把这些信息写回磁盘。 下面举例说明: 缓冲池有5个缓冲区,先后存储一下数据:5 2 5 12 3 6 5 9 3 2 4 1 5 9 8 15 3 7 2 5 9 10 4 6 8 5 首先用LFU算法存储数据: 第一次 5 2 12 3 6(5次数为2) 第二次 5 9 12 3 6(5次数为3,3次数为2) 第三次 5 3 9 2 6 第四次 5 3 9 2 4 第五次 5 3 1 2 4 第六次 5 3 1 9 4 (5次数为4) 第七次 5 3 1 9 8 第八次 5 3 15 9 8 第九次 5 3 15 7 8 (3次数为3) 第十次 5 3 15 7 2 第十一次 5 3 9 7 2 (5次数为5) 第十二次 5 3 9 10 2 第十三次 5 3 9 10 4 第十四次 5 3 6 10 4 第十五次 5 3 6 8 4 (5次数为6) 整理 5 3 4 6 8(从左到右为出现次数由多到少,若次数相同,则从左到右为出现时间为后到先)再用LRU算法存储数据: 第一次 5 2 12 3 6 第二次 5 9 12 3 6 第三次 5 9 2 3 6 第四次 5 9 2 3 4 第五次 1 9 2 3 4 第六次 1 5 2 3 4 第七次 1 5 2 9 4 第八次 1 5 8 9 4 第九次 1 5 8 9 15 第十次 3 5 8 9 15 第十一次 3 7 8 9 15 第十二次 3 7 8 2 15 第十三次 3 7 5 2 15 第十四次 3 7 5 2 9 第十五次 10 7 5 2 9 第十六次 10 4 5 2 9 第十七次 10 4 5 6 9 第十八次 10 4 8 6 9 第十九次 10 4 8 6 5 整理 5 8 6 4 10(从左到右为出现时间从后到先)
以上为本人所积累的方法,供各位参考,若有不明白之处可以提出,我们共同探讨。