首页 > 其他 > 详细

缓存技术(1)

时间:2014-02-19 07:40:58      阅读:302      评论:0      收藏:0      [点我收藏+]

  我们知道,在现代计算机系统中,数据都是以0和1的形式存储的。而要表示0和1两个不同的状态,常常可以根据电荷的有无或者多寡来分别对应。一个可以表示二进制状态的装置就可以算是一个存储单元,其代表的数据容量为1bit。可以做存储单元的电子产品有千千万万,电容作为一种可以简单实现的工艺产品,且其充电状态的有无很明显地折射出二进制的意味,很自然的,它也可以用作存储单元,事实上,动态存储器(Dynamic RAM)的存储单元便是一个电容加上一个晶体管组成的。于是一个电容就存储着1bit的数据,一个容量为1G的动态存储器,有8x1024x1024x1024 个bit,里面的电容器数量超过了80亿个,比全球人口还多!

  但由于电容器中间的绝缘体并非绝对绝缘,不可避免的,电容器会出现“漏电”的情况,而且这种电容器本身电荷就少,动态存储器的数据看起来极易丢失。为了解决这个问题,制造商的做法是,在电容器数据丢失之前对其状态进行刷新。由于电容器一次存储数据的时间非常短(不超过100毫秒),所以动态存储器在通电的情况下,其内部数据刷新是非常频繁的。这种需要不断通过刷新来保持数据不至丢失的机制就体现了动态存储器的动态性。相对于动态存储器,更早期出现的静态存储器(Static RAM)指的就是不需要刷新电路即可使内部数据保持不丢失的存储器。静态存储器为了达到不需要刷新即可保存数据的目的,其付出的代价就是每个存储单元都要用到更多的晶体管,这就使得其占用的空间更大,但存取速度却比动态存储器快很多。

  目前的静态存储器通常集成在cpu内部,而动态存储器则普遍应用在内存上。cpu运行时往往需要读取内存中的数据,由于cpu在静态存储器中读取数据的速度比在动态存储器中读取数据的速度快得多,这就会出现cpu空置的情况。为了提高cpu和内存的协同运作的效率,从x86系列的386开始,引入了高速缓冲存储器,即缓存。

  怎样定义缓存呢?其实,缓存可以是一种特指的存储器(cache),也可以是一种机制(caching)。

  当作为存储器理解时,它指的是连接在cpu和内存之间,用以解决内存读取速度严重滞后于cpu运算速度而引入的缓冲区。根据缓存与cpu的紧密程度,可以将缓存分为一级缓存(Level 1 cache)、二级缓存(Level 2 cache)(现在已经出现了三级缓存(Level 3 cache))。多个级别的缓存容量逐级递增,但读取速度却逐级递减。当cpu需要读取数据时,它首先会到L1 中查找,如果L1中有所需的数据(此时称为“命中”,即HIT),cpu就不必访问L2、L3和内存,而直接从L1读取所需数据;如果L1中没有所需的数据(此时称为“未命中”,即MISS),cpu就要跳到L2中查找,如果L2中有所需的数据,就直接读取所需数据,并且将该数据复制到L1中;以此类推,不到万不得已,cpu是不会读取内存的数据的。需要注意的是,缓存中的数据并不是一成不变的,为了保证高命中率,缓存中的数据会根据一定的算法进行更新。L1中包括了数据缓存和指令缓存。AMD在一级数据缓存的设计上,自始至今都采用“实数据读写缓存”,即当命中时,就直接读取L1中的数据,这种设计加快了数据的读取速度,但对L1的容量要求却加大了;而Intel则从P4开始就采用“数据代码指令追踪缓存”设计,在这种设计里面,L1的数据缓存不再保存实际数据,而是只保存二级缓存数据的指针,当命中时,cpu要到L2中读取实际数据,这就降低了L1的容量要求,但却加大了L2的容量要求。此外,Intel在P4之后,其一级指令缓存的设计和AMD的也是不同的,AMD采用的一级指令缓存只是对指令进行即时解码,不储存解码后的指令;而Intel所采用的“一级追踪缓存”除对部分指令做即时解码外,还能将解码后的微指令(micro-ops)进行储存。由于设计上的不同,二者的参数单位也不同,AMD一级指令缓存的单位为KB,而Intel的一级追踪缓存,其单位为KμOps。

  当缓存作为一种机制来理解时,它所指的就是一种类似于上述所提到的,在两个运算速度不匹配的设备间建立缓冲区的方案。于是,硬盘可以有硬盘缓存,显卡可以有显卡缓存。

  用一句流行的话来概括缓存的机制,那就是“以空间换取时间”。

  在今天的计算机世界中,缓存技术的应用已经是十分普遍的了,一个典型的例子就是在web上的应用。

  假设有一个动态网站,当我们向该网站的服务器发出一条SQL请求时,服务器需要连接数据库并返回查询结果给客户端。如果返回数据比较多,这时我们会很明显感受到网页的加载速度十分缓慢。想象一下像谷歌这种每天搜索量过亿的网站,它是怎么做到对客户端的快速响应的呢?这除了硬件上和算法上的支持外,还得靠缓存技术的帮忙!

  所谓的服务器端缓存,就是为了解决服务器端返回数据的速度速度严重滞后于客户端发送请求的速度这一问题而引入的缓存技术。在服务器端,一个严重拖慢响应速度的因素就是数据库的连接。为此,百度、谷歌这一类的巨头企业网站都会将常见搜索关键字的搜索结果保存在服务器缓冲区中,以便下次遇到同样的关键字,可以直接从缓冲区中获取结果并发送给客户端。这样就不用每次都连接数据库,大大的加快了数据返回给客户端的速度。当然,这是基于查询类网站而言的。再有些网站,用户可能不仅进行查询操作,还会进行数据更新的操作,这时,缓存的内容就要以适当的规则进行更新。

  相对于服务器端缓存,客户端缓存,也称为本地缓存,其实际上做的就是在本地磁盘上保存本地用户浏览网站时所请求的页面或者其它形式的数据,以便下次访问时直接从该文件夹中加载相应的文件,从而大大提高页面加载速度。

缓存技术(1)

原文:http://www.cnblogs.com/sengnj/p/3554595.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!