4.10-替换算法
需要替换算法的原因#
几种常见的替换算法#
-
先进先出法 FIFO(First In First Out)
- FIFO算法选择最早调入 Cache 的字块进行替换,它不需要记录各字块的使用情况,比较容易实现,开销小
- 没有根据访存的局部性原理,故不能提高 Cache 的命中率 // 因为最早调入的信息可能以后还要用到,或者经常要用到,如循环程序
-
最不经常使用法 LFU (Least Frequently Used )
- 载入的那次不算,当是在初始化count=0了
- Cache 满时,淘汰 计数值count(使用次数) 最小的
- 当count相同时,可配合使用其他替换算法
-
近期最少使用法 LRU(Least Recently Used )
- LRU 比较好地利用访存局部性原理,替换出近期用的最少的字块
- 它需要随时记录 Cache 中各字块的使用情况,以便确定哪个字块是近期最少使用的字块
- 它实际上是一种推测的方法,比较复杂,一般爱用简化的方法,只记录每个块最近一次使用的时间
- 新调入,初始化为0
- 命中,清0
- others 随着t的增长,++
- 淘汰 计数值count(t时间没被使用) 最大的
- LRU 平均命中率比 FIFO 高
-
随机替换法
- 随机法是随机地确定被替换的块,比较简单,可采用一个随机数产生器产生一个随机的被替换的块
- 但它也没有根据访存的局部性原理,故不能提高 Cache 的命中率
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?