jeffxl 发表于 2012-4-26 04:37
你没事突发的去玩下大量数据的复制粘贴啦,跑高IO压力的应用,例如一些高IO变态游戏,那么动态缓存会迅速利 ...
认真学习了这个主题帖,读后确实很有益处~!一页一页浏览到100楼左右,看到版主和网友深刻的讨论,突然就想进来插一句了,呵呵呵,新人报道,多多指教~~!
其实jeffxl版主还有yanleiberg网友所持观点大同小异,都是对缓存、缓冲有自己的理解,另外也都是可以说是正确的理解;而二位辩论的地方我觉得简单来说是有两个细节地方。。。
论坛新人斗胆出来冒个泡。。。轻喷。。。
首先,微软视窗系统的普适性内存管理的考虑固然是有其道理的,至少微软目前选取并且使用了这种内存管理策略。另外从视窗系统用户使用效果来看,这种内存管理还是有一定效果的(相比于此前的其他视窗系统)。但是对另一边的使用者来说,每个使用者都是不同的个体,多多少少每个人的使用习惯,日常应用软件都是不尽相同的,而这就产生了如下的矛盾点:
某一部分用户想人为的让某个程序启动更快速,比如office(即使平时该用户office使用频率不是非常大,但还是希望能够在启动完系统后系统就立马预加载这相关文件数据信息,从而达到随时启动office都可以秒内开启文档编辑的效果 —.—),而对于另一些软件或者程序操作的话又并不需要追求在当前机器硬件条件下的极致加载启动速度,而这些项目平时启动的频率又较高,或者说较一些人为想快速启动的软件使用的频率高,那么在视窗系统目前的内存机制下面,是否就是会更倾向于预加载使用频率高的数据,而这些数据并不全是使用者希望预加载的,或者就是说使用者希望预加载的数据在视窗系统目前的内存机制下没有得到预加载或者说这些数据没有能够得到长时间的驻留。
比如说office,就以我自己的情况来说事,在启动word之后开启其他的word文档时是直接跳出了完整的文本编辑的窗口,而当我把任务栏上所有word窗口都关闭后(相应的我们可以看到,在任务管理器的“进程”标签里 WINWORD.EXE 这个进程也相应的终止了),再次点开某一个word文档(可以是任意一个word文档,不一定要是之前打开过的那两个文档),发现会弹出一开始的小窗口就是显示"正在启动"word。。。,大概一秒之后才打开最后的文本编辑界面。首先自爆家门,我是新手小白,也许这个事例的原因不是与缓存相关,正因为新人不是很了解,所以就大胆的提出来想交流一下的说。。。我个人目前觉得这个是因为在关闭word之后office word的相关数据信息被从内存里“清掉”了,就是说只是在缓存里驻留了一部分相关文件数据,而没有驻留所有需要用到的word相关数据信息,才会导致关闭所有word窗口后再次打开word文档会有1秒钟的延迟或者说是1秒钟的准备时间。而此时被清理出来的内存空间做了什么呢?或者是基于视窗系统对可能发生的一些突发事件的考虑,留出了“空闲”容量,或者是当前系统IO吃紧,在关闭word文档的同时,内存用来缓存读取更重要的文件数据了,反正总之就是系统把word的一部分相关文件清出了内存了。。。(额。。。激动了,激动了。。。语气略显鸡动了。。。)如若此处说法有错误,还请版主及网友们指正~!
最后说一下对于jeffxl版主和yanleiberg网友辩论的看法:
个人粗浅的认为,针对目前视窗系统使用的内存管理机制,yanleiberg网友有两个地方觉得用户自己用起来不是很顺手,不是能完美的解决用户的需求。1、系统查看16GB容量内存基本上都有8G左右的空间是“空闲”空间,而用户希望是用上16GB内存后系统能够尽可能多的后台读取一些数据,尽可能的缓存更多的数据,然后相对的来说就可以更大范围的做到快速启发的效果;2、在做bt、pt、迅雷等软件的下载任务是,例如uTorrent,下载了才几十MB,就从缓存空间里写入硬盘了,可能UT设置的缓存是1G,或者2G什么的(UT应该是读取写入缓存算一起的吧,就是总共缓存空间是1GB或者2GB),可是只见缓存空着,读取缓存也没有压满,但是写入缓存里才缓存了几十 MB 的数据就做了写入硬盘的操作了。
对于上面第一点,看了两位此前的辩论,个人觉得就是说可能是因为微软视窗系统的内存管理机制所致,或者是想预留足够的内存空间给突发事件作处理,或者真是根本就没有到达预读缓存的那个“阀值”,内存就不做另外的预读取工作或者长时间驻留数据工作了,因为说到底,内存缓存读取的也是硬盘的数据,也是在硬盘上读数据操作,如果说一味做着不记开销地预读取操作(不管读取的数据有没有用,或者有没有必要这样大的密度读取数据、有没有必要这样高的频率读取数据),那无疑是给磁盘不间停的大负荷,一定程度上牺牲了磁盘的寿命,或许微软程序员测试后找到了这个“阀值”,低于这个阀值也触发内存满速预读取数据的话就有一点点的得不偿失吧。。。另一方面关于已经是用过的“热”数据驻留内存空间的问题,可能一些网友会说为什么不是我用多少就装多少,用完了先不丢,等再用其他的再把先前的推出去呢?这里暂且不讨论先“丢”好,还是后“推”好,举个极端的例子就是说某天把windows7SP1 ISO文件(x86 2.46G x64 3.18G)从D盘拷贝一份到C盘,这时就是如版版所说的内存“空闲”空间会最大程度的被利用起来(当然啦,只是做了预处理工作,就是“可用”空间是没怎么变动的,变动的只是“已缓存”空间容量),直到这个拷贝任务完成才会再次释放内存缓存空间,而这个ISO的缓存文件是没多大的必要驻留在缓存里的,除非就是想一下子拷贝个好几份的。。。在这种情况下,与其 后“推”,就不如在拷贝任务完成后就 先“丢”来的有效率了。
对于上面第二点,还是基于两位前面的辩论,从两位的回复中学到了很多,也对一些规范、概念更加了解了一点,这里插个楼先感谢两位~~!呵呵,对于第二点,或许就确实是微软视窗系统对于数据安全的考虑,所以写入缓存默认就没有太大。。。
总的来说,归根结底,jeffxl版主在之前回复中也说过,直接套用一下版版的话,就是微软兴许是为了普适性、安全性,而没有给用户过多的内存自定义明细设置,但是对于广大爱动手的网友们来说,恰恰相反,我们需要的可能正是DIY,追求的正是针对自己需求的最佳配置、最佳设置。
以上。。。
如有冒犯,还请网友见谅~~! |