回 帖 发 新 帖 刷新版面

主题:[原创]VFP的fopen函数缓冲与非缓冲区别

上社一些foxer经常问我VFP的一些函数缓冲与非缓冲区别的问题,最典型的就是fopen()这一经常用到的函数。其实,缓冲与非缓冲是操作系统层面的问题,并非VFP一门语言所独有,下面我就在开心上社上给大家分享一下,我对缓冲与非缓冲的理解。

  前面已经说过,缓冲与非缓冲是操作系统层面的问题,也就是file I/O读写的操作。

  简单说,一个计算机,最主要四大件:显示器,CPU,内存,硬盘。计算机内的信息都是以二进制数据的形式保存,这些数据可以长时间保存在硬盘中,即时地保存在内存上,即时地在CPU上进行运算,而显示在显示器上的数据则一般是保存在内存或者显存(独立显卡)上。由此可知,数据“保存”在硬盘上,“临时储存”在内存上,而CPU则是对数据进行修改性运算的。

  有了上面对计算机硬件的了解,我们就不难理解什么是缓冲,什么是非缓冲了。

  所有程序语言,包括VFP,它们的函数都是一些指导CPU进行运算的指令,每一个需要操作文件的指令,比如fopen(),都是需要先把硬盘上的数据,读取过来,然后再进行运算,最后保存回硬盘上。

  结合前面对硬件的了解,我们不难看出,在数据的“读取—运算—回存”过程中,是存在差别的,这差别就是缓冲与非缓冲的区别。

  应用了缓冲技术的“读取—运算—回存”过程,数据流是这样的:CPU先在内存上开辟一块区域,然后硬盘读取数据,临时存在内存开辟的那片指定区域上,当这片区域存储满的时候,CPU再对这些数据进行运算;运算完,再储存到内存的指定区域,当内存指定区域存满的时候,再一次性保存回硬盘,实现长期储存。

  而非缓冲呢,则是,CPU直接到硬盘读取数据储存为内存变量,读取一点,就马上运算一点,运算完直接存回硬盘。

  由此可知,当数据量小的时候,非缓冲I/O是系统直接的输入和输出,它不经过“缓冲区”,所以从速度和效率方面来说就显得快很多,但是当数据量比较大的时候,非缓冲I/O频繁地读取和储存数据,在速度和效率就会大打折扣。

  OK,前面就是开心上社站长对缓冲与非缓冲的一些理解,非常浅显,希望权威人士能够予以斧正。本文原创自开心上社www.kxss.net,欢迎转载,转载请注明出处。

回复列表 (共3个回复)

沙发

这贴内容讲得和题目不一致,题目是《VFP的fopen函数缓冲与非缓冲区别》,而文中讲的是概述,而非fopen()函数缓冲与非缓冲区别,文不对题。

有比较严重的广告嫌疑。

板凳

路过,支持一下谢谢楼主了,请继续努力






















[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]

3 楼

很好的文章啊!-------------------------------------------Jordan brand continues to prosper and expansion of its stores throughout the many countries around the world.[url=http://www.cheapjordanforsale.us]cheap jordans[/url] , [url=http://www.cheapjordanforsale.us/air-jordan-11-retro-c-11.html]retro jordan 11[/url] , [url=http://www.cheapjordanforsale.us/air-jordan-13-retro-c-13.html]retro jordan 13[/url] , [url=http://www.cheapjordanforsale.us/air-jordan-5-retro-c-5.html]retro jordan 5[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册