什么是程序的局部性原理
01、前言
作为有追求的程序员,我们日常在写代码的时候往往都会运用很多奇技淫巧,不单单是为了炫耀我们的技术,更是为了追求更高的效率。了解局部性原理,可以有效的帮助我们理解和写出更好的代码,对于局部性原理可能有的小伙伴知道,有的小伙伴不知道,知道的小伙伴就当做复习知识点,不知道的小伙伴也没关系,接着往下看就知道了。
02、什么是局部性原理
说到局部性原理,那我们首先要知道什么是局部性原理,局部性原理分为两部分:
- 时间局部性:指的是在程序运行过程中最近被引用到的存储器位置在程序执行后期还会被多次引用到的可能性很大。
- 空间局部性:指的是程序运行过程中如果一个存储器的位置被引用,那么在程序执行后期该存储器附近的位置被引用的可能性很大。
简单来说就是一个变量在程序运行过程中,如果被引用过一次,那后续很有可能会再被引用到;一个变量被访问到过后,这个变量所在的位置附近的位置很有可能在程序后续运行中被访问到。
03、示例
上面是通过理论来说明的,下面我们通过一段代码来看看局部性y原理
public int sum(int[] array) {int sum = 0;for (int i = 0; i < array.length; i++) {sum = sum + array[i];}return sum;
}
从上面的这段代码来看,就是一个很简单的数组元素求和,这里我们主要看 sum 和 array 两个变量,我们可以看到 sum 在每次循环中都会用到,另外它只是一个简单变量,所以我们可以看到,sum 是符合我们上面提到的时间局部性,再访问一次后还会被继续访问到,但是它不存在我们所说的空间局部性了。
相反的,array 数组中的每个元素只访问一次,另外数组底层的存储是连续的,所以 array 变量符合我们上面提到的空间局部性,但是不符合时间局部性。
这只是局部性原理的简单示例,对于局部性原理还有很多地方会用到,我们如果能熟练的掌握和使用,对我们的帮助会很大的。
04、相关应用
4.1、CPU 缓存
上面的示例其实很简单,相信大家都能理解,另外局部性原理其实在我们日常使用的软件中随处可见,并且在操作系统中也少不了。我们知道 CPU 的速度是非常快的,而且 CPU 与内存之间有多级缓存,如下图(图片来源于网络)
为了充分的利用 CPU,操作系统会利用局部性原理,将高频的数据从内存中加载的缓存中,从而加快 CPU 的处理速度。
4.2、广义局部性
其实我们的局部性原理不单单是上面提到的狭义性的局部性,还可以是广义的局部性。我们系统里面的热点数据,CDN 数据,微博的热点流量等等这些都利用了局部性原理。只是我们可能没有意识到而已,实际上已经在使用了。我们会通过 Redis 缓存热点数据,会通过 CDN 提前加载图片或者视频资源,等等,都是因为这些数据本身就符合局部性原理,合理的利用局部性可以得到了能效、成本上的提升。
4.3、利弊结合
任何事情都是多面性的,局部性原理虽然我们使用起来很不错,可以提高系统性能,但是在有些场景下,我们是需要避免局部性原理的出现的。或者说出现了这种情况,我们需要人工处理。我们可以试想一下,如果在我们的一个大数据处理平台上,由于局部性原理的存在,导致我们部分节点数据庞大运算吃力,部分节点数据量小十分空闲,这种情况自然是不合理,我们就需要把数据按照业务场景进行重新分配,以达到整个集群的最大利用。
05、总结
今天给大家介绍了一下局部性原理,我们提到了时间局部性和空间局部性,通过一个代码示例和几个业务场景给大家简单介绍了局部性的使用。最后也提到局部性原理有利也有弊,我们需要根据业务场景和需求合理话的使用。
什么是程序的局部性原理相关推荐
- 3.程序的局部性原理
程序的局部性原理是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分.它们倾向于引用的数据项邻近于其他最近引用过的数据项,或者邻近于最近自我引用过的数据项. 在现代计 ...
- java 局部性原理_程序局部性原理
程序局部性原理 本文目的:使读者快速理解 本文定位:学习笔记 学习过程记录,加深理解,提升文字组合表达能力.也希望能给学习的同学一些灵感 程序局部性原理 程序的局部性原理是指程序在执行时呈现出局部性规 ...
- (计算机组成原理)第三章存储系统-第六节1:高速缓冲存储器Cache及其相关基本概念、程序访问的局部性原理和命中率
文章目录 一:Cache的基本原理 二:程序访问的局部性原理 三:主存块 四:命中率和缺失率 由于程序的转移概率不会很低,且数据分布的离散性较大,所以单纯依靠并行主存系统提高主存系统的频宽是有限的.这 ...
- 深入浅出计算机组成原理学习笔记:局部性原理-数据库性能跟不上,加个缓存就好了(第36讲)...
平时进行服务端软件开发的时候,我们通常会把数据存储在数据库里.而服务端系统遇到的第一个性能瓶颈,往往就发生在访问数据库的时候. 这个时候,大部分工程师和架构师会拿出一种叫作"缓存" ...
- Linux 操作系统原理 — 内存 — 基于局部性原理实现的内/外存交换技术
目录 文章目录 目录 前文列表 基于局部性原理实现的内-外存交换技术 局部性原理 Swap 交换分区 前文列表 <Linux 操作系统原理 - 内存 - 物理存储器与虚拟存储器> < ...
- 缓存机制与局部性原理
http://www.cnblogs.com/jqctop1/p/4714116.html 1. 局部性原理 局部性原理是指计算机在执行某个程序时,倾向于使用最近使用的数据.局部性原理有两种表现形式: ...
- 计算机术语局部性,【计算机基础】程序的局部性简介
什么是局部性? 局部性分类 局部性有什么作用? 局部性举例数据引用的局部性 取指令的局部性 结论 完整代码 什么是局部性? 程序倾向于使用它们最近使用的地址接近或相等的数据和指令. 局部性分类 局部性 ...
- 【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)
文章目录 一. 分页存储概念 二. 地址转换 1)为什么页面大小为2的次幂? 三. 页表 1)页表项长度.页号"隐含" 四. 局部性原理与快表 五. 二级页表 1)单级页表存在的问 ...
- 【王道计组笔记】高速缓存器:局部性原理及性能分析
背景: 随着CPU的工作速度成指数级增长,但是主存速度跟不上,所以要提升主存速度非常重要. m个模块采用低位交叉编址的方式可以基本上将主存的带宽提升m倍,但是这依旧与CPU差距很大. [王道计组笔记] ...
最新文章
- E. coli Bacterial Assembly 大肠杆菌
- 波涛汹涌的黄金甲,一碗中药引发的血案!
- [译] 重写 loadView() 方法使 Swift 视图代码更加简洁
- 数学问题->分数的四则运算
- 独家揭秘!阿里大规模数据中心的性能分析 1
- python面试题_17道Python面试题,分享给你以防不测!
- 计算机工程学院运动会方阵口号,关于校运会的方阵口号
- elastic安装,简单配置
- 设置ngxin服务器虚拟主机,详解Nginx 虚拟主机配置的三种方式(基于端口)
- shiro多Realm分别授权
- 京东回应拖欠神州 3 亿多元货款;苹果考虑将第三方浏览器和邮件设为默认;PS 诞生 30 周年| 极客头条...
- hibernate4.2.1默认集成javassist-3.15.0-GA包的一个bug问题
- 孙鑫-MFC笔记一--Windows程序内部运行机制
- 推荐系统评测指标—精准率(Precision)、召回率(Recall)、F值(F-Measure)
- MagicBook2018 解决指纹失效
- 洛谷P4939 Agent2(树状数组差分)
- 不到三十行代码,免费看“美剧”
- 新西兰.net和java_使用Linux容器分析气候变化和土壤对新西兰农作物的影响
- truetype字体怎么转换成普通字体_TrueType字体该如何设置呢?
- java 转换pdf页面尺寸_Java PDF页面设置——页面大小、页边距、纸张方向、页面旋转...
热门文章
- 闭包、闭包作用及缺点
- 海外推广:常见的7个海外推广营销方式!
- ZBrush创建3D模型的方法
- switch 是否能作用在 byte 、long、String ?
- 韦小宝七个老婆的武功排名
- 《黑白配》算法考题:黑白点的最大匹配数目(JavaScript解答)
- js正则贪婪模式_JS关于正则的非贪婪模式
- C++ cin的使用,看这一篇就够了
- 华为OD机试 -分苹果(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
- arduino 勘智k210_嘉楠一代AI芯片勘智K210功耗仅0.3W 加速国产AIoT架构轻量化