关于为什么使用缓存能提高程序执行效率

简介: 关于为什么使用缓存能提高程序执行效率

先来解释一下上面这张图片,从图中可以看出首先主存与CPU之间的存取速度的差异非常大,而主存中存放的,是每个程序运行时所需要的数据,CPU需要从主存中存取这些数据,但是由于主存与CPU存取速度的差异,导致了限制程序运行效率的因素并非CPU的速度不够快,而是由于存储设备准备数据较慢导致的,因此为了充分发挥CPU的行能,现代存储体系选择在CPU与主存之间增加一个高速缓存(Cache),高速缓存与CPU才用同一种材料制成,因此CPU与缓存之间的访问几乎没有时延(所以缓存的容量非常小,因为非常贵).如下所示是我电脑的CPU所拥有的缓存.

缓存是如何提高程序的运行效率的呢?

缓存容量小,功耗大,但是其速度快于主存.

缓存中存放的,是主存(也就是程序所存放数据的地方)部分数据的副本,CPU可以通过访问缓存,来访问主存,这是因为缓存可以访问主存.假象如果CPU所需要的数据与指令都能在缓存中得到满足,那么CPU访问主存的次数就将减少,那么被主存的拖累就会减少,效率因此也就提高.

那么一个缓存也就几KB,能存放的数据非常有限,它却为什么能减少CPU去主存这个大仓库中取数据的次数呢?

这时候就需要引入一个名词程序的局部性原理.

程序局部性原理百度百科介绍

程序的局部性原理是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性原理又表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。空间局部性是指一旦程序访问了某个存储单元,则不久之后,其附近的存储单元也将被访问。

也就是说如果一个数据能在缓存中被使用,那么这个数据可能会经常的被使用.

并且由于主存与缓存是能进行数据交互的,因此当CPU这一次没有在缓存中找到数据(未命中),那么CPU就会去主存中引入数据,同时这次引入的数据也将更新原有的缓存,因此缓存能保证其当前存储的数据都是CPU最有可能使用到的.


相关文章
|
6月前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
972 0
|
3月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间
【Azure Redis 缓存】C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间
|
3月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】遇见Azure Redis不能创建成功的问题:至少一个资源部署操作失败,因为 Microsoft.Cache 资源提供程序未注册。
【Azure Redis 缓存】遇见Azure Redis不能创建成功的问题:至少一个资源部署操作失败,因为 Microsoft.Cache 资源提供程序未注册。
|
5月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
108 5
|
6月前
|
缓存 Java 数据库
优化您的Spring应用程序:缓存注解的精要指南
优化您的Spring应用程序:缓存注解的精要指南
107 0
|
6月前
|
缓存 监控 安全
如何使用LRU缓存来提高程序的性能?
如何使用LRU缓存来提高程序的性能?
66 3
|
存储 缓存 算法
Python缓存神器cachetools:提高程序性能的利器,一文详解其缓存算法
Python缓存神器cachetools:提高程序性能的利器,一文详解其缓存算法
Python缓存神器cachetools:提高程序性能的利器,一文详解其缓存算法
|
缓存 固态存储 Ubuntu
十七、Linux性能优化实战学习笔记-如何利用系统缓存优化程序的运行效率?
Buffer 和Cache 的设计目的,是为了提升系统的 I/O 性能。它们利用内存,充当起慢速磁盘与快速CPU 之间的桥梁,可以加速 I/O 的访问速度。
284 0
|
存储 缓存 数据库
极速Python编程:利用缓存加速你的应用程序
在软件开发中,缓存是一种常用的技术,用于提高系统性能和响应速度。Python提供了多种缓存技术和库,使我们能够轻松地实现缓存功能。本文将带您从入门到精通,逐步介绍Python中的缓存使用方法,并提供实例演示。
301 0
|
存储 缓存 移动开发
前端开发面试题—HTML5应用程序缓存 (离线存储)
今天分享一下我遇到的前端面试题,什么是HTML5应用程序缓存 (离线存储) ?
255 0
前端开发面试题—HTML5应用程序缓存 (离线存储)

热门文章

最新文章