目录
1 cache的引入
2 cache的工作原理
3 cache使用限制
1 cache的引入
程序运行的流程(很简单):
- 程序编译:存放在flash;
- 程序加载:程序加载到内存;
- 程序运行:指令从内存复制到CPU执行;
咋一看,功能没有问题,但在实际项目中,程序的执行性能将会受到致命的影响。很大原因:程序运行过程中,执行了很多的“指令复制”的工作,CPU的大量时间片被用来进行指令搬移,导致真正执行指令的时间变得很少,性能差也就不足为怪了。
性能优化的目标:根据程序执行流程得出
尽可能减少 “复制操作” 占用的CPU时间片,将CPU释放出来;
客观的因素:根据优化目标得出
- CPU内部可存储指令的空间很小,常驻指令将非常少
- 可执行程序所用到的指令数量远远大于CPU内部的存储空间,程序运行需要大量的复制动作
解决方案:针对客观因素
- CPU内部可存储指令的空间很小,常驻指令将非常少
- 增加一个中间模块,CPU到其存取速度 和 CPU到寄存器存取速度差距不大
- 中间模块的大小适当增大,成本合适的前提下,尽可能大的增加中间模块的空间
- 可执行程序所用到的指令数量远远大于CPU内部的存储空间,程序运行需要大量的复制动作
- 为中间模块添加策略:通过预测算法将常用的指令+可能会用到的指令,提前加载中间模块,等程序运行时,先到中间模块进行指令查询
- 查询到:直接使用
- 查询不到:到内存进行查询读取(如果是中间模块是多级存在,则挨级进行查询)
- 为中间模块添加策略:通过预测算法将常用的指令+可能会用到的指令,提前加载中间模块,等程序运行时,先到中间模块进行指令查询
上文说到的中间模块,其实就是cache:
2 cache的工作原理
3 cache使用限制
cache是好用,但并不是所用场景都适用,有些时候,为了数据的可靠性,不得不牺牲掉一些性能来保证。比如: