科技名词
程序局部性
program locality
定义:程序访问数据和代码的不均匀性,即程序倾向于访问其地址空间中的一小部分的特性。
学科:计算机科学与技术_计算机体系结构_计算机模型
相关名词:时间局部性 空间局部性
【延伸阅读】
程序的局部性是一个常用的计算机术语,是指程序在执行时呈现出局部性规律。即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。处理器在访问这部分存储空间的数据时,短时间内存在重复访问。
理解程序的局部性,首先需要了解数据在内存中的组织形式。内存可以理解为一个一维数组,即一串连续的可以存储数据的格子,每个格子中可以存放一个字节的数据。程序执行时需要先将代码段和数据段加载到内存中,再按照指令顺序一步步完成对数据的操作。局部性原理又可表现为时间局部性和空间局部性。
时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。这种情况下,可以把常用的数据加载到高速缓冲存储器(Cache)中来优化访存。
空间局部性是指一旦程序访问了某个存储单元,则不久之后,其附近的存储单元也将被访问。一个变量在程序运行过程中,如果被引用过一次,那后续很有可能会再被引用到;一个变量被访问到,这个变量所在的位置附近的变量很有可能在程序后续运行中被访问到。
基于局部性原理,计算机处理器在设计时做了各种优化,比如现代CPU的多级Cache、分支预测等。在程序设计时,也需要在局部性原理上做充分优化。虽然局部性一词源于计算机设计,但在当今分布式系统、互联网技术里也广泛存在。例如使用redis(REmote DIctionary Server,一种轻量级的内存数据库,多用来存储用户频繁访问的数据库信息),以免需要经常访问后台数据库,多用来减轻程序后端数据库的压力,以及著名的“八二”法则等。
(延伸阅读作者:大连理工大学计算机学院教授 杨鑫)