首页

[MSN]Cache

03 Jul 2008

缓存
一个充当着在两个有着比较明显数度差异的设备间的一个缓冲作用
时下在PC内部各个存储设备间的速度差异实在是十分的明显
好的可以像是CPU内的寄存器他们拥有着甚至几个数量级的优于我们那些现有内存的存取速度
而有的像是硬盘或者是光盘再或者是软盘闪盘之类
他们则倒是让内存独领风骚了
在涉及到具体的开发时也许我们并不需要关注过多的实现细节
至少没有那个应用级的程序员连在计算机内部总线上数据的传输都要插上一杠
这是十分明智的因为分层的设计原则本身就是为了让我们剥离于与硬件相互交互
而只是关注于程序的最主要的逻辑部分
但是相对来说在开发过程中
还是要注意三个主要的环节 CPU 内存 外存 实际上网络也许也要占一席位吧
三者之间的速度差异都是在1到2个甚至是3个数量级的
能否合理的利用好这些可以很大程度上的加快程序的执行效率
原本经常放在外存上的资料如果在内存中留有一个备份并且可以不用担心同步问题使用
那怎的可以使我们如同得到了一个数万转速的硬盘当然大家都知道就算是阵列也很难有这样的绩效
一个不涉及对内存取址的操作可以节省出多少的时钟周期么
同样也是很可观的可观的让我们在逻辑上优化之后又很好的迎合了我们的那些可爱的芯片设计师的思想
但是现实往往是残酷的我们为了得到开发的便利却无条件的也丧失了对底层的具体控制
没有哪个语言提供了足够多的关键字来分门别类的告诉我们的编译器在需要的地方特别处理
而聪明的我们实际上更加不满足于现有的处理方法
毕竟那些编译器的开发者们可是本着以不变应万变的思想去设计并实施的
还有一个更加糟糕的问题就是并非每个语言都像C/C++那样可以稍微去控制我们的那些不怎么常见的资源
像是Java之类的程序设计语言是构建在在具体的JVM上的
她可是天生注定了你没有权利去干涉具体的硬件设备是怎么运作的
你甚至无法在程序运行时获得执行体的CPU是否拥有一级二级或者三级缓存
当然Java程序员在大多数的情况下是不需要拥有这样的权限的
Sun公司正在不断的完善他们虚拟机为的仅仅是让我们的Java程序能够跑的更快当然前提不是去购买奢侈的IBM计算机
CPU的发展走过了十分悠久的历史
就算仅仅是去统计Intel公司的奔腾系列也是有了十几年的光阴
成长到现在我们所拥有的CPU的资源也不仅仅只是像8086上那为数不多的十几二十个寄存器了
一套十分庞大的计算资源摆在我们的面前而且可能还是多份的
我们注定要成为与之相隔离的那部分
但是内存的大门应该永远敞开的
没有哪个编译器希望连对内存的操作也为我们代劳
那是多么的不现实
相比于我们那发展了十几年都没有什么大突破的硬盘来说
内存可真的是一个好东西啊
至少他的速度没有像硬盘那样有着一个那么让人不满意的瓶颈
而且伴随着半导体的价格下降连一些普通的PC用户也能享受得起G级别的内存了
当然如果可以的话我倒是很希望我拥有一个和我的硬盘相同大小的内存
可惜这样的主板不存在
内存的角色是十分重要的对于计算机来说一个程序的执行所有的状态都必须在内存上留有一些痕迹
内存要担当起保存CPU无法保存的程序运行状态的相关信息
这是很重要的及时有着数十个寄存器但是他们毕竟还是寄存器
他们的累加和还不如我们内存上的一个页所保存的资料多
我们必须意识到内存是第一直接的与我们的CPU交互而且好像他们不怎么需要驱动程序干涉…
呵呵这也许也表明了他们之间真的亲密无间啊
我们不用过多的担心CPU访问内存的效率
因为硬件设计时尽量快的实现这点我们的关注重点更应该集中在怎么可以尽量只去访问内存
当一个作业的复杂程度提高时这点尤其重要
对于那些IO频繁的作业更是成败的关键
一次IO的时间相对于内存来说还是太奢侈了
如何减少不必要的与外设交互直接影响了作业的效率
程序设计的时候不能不在意这点
毕竟这个也是我们在各个语言中都可以控制的外部资源了

comments powered by Disqus