主题:[原创]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,欢迎转载,转载请注明出处。
前面已经说过,缓冲与非缓冲是操作系统层面的问题,也就是file I/O读写的操作。
简单说,一个计算机,最主要四大件:显示器,CPU,内存,硬盘。计算机内的信息都是以二进制数据的形式保存,这些数据可以长时间保存在硬盘中,即时地保存在内存上,即时地在CPU上进行运算,而显示在显示器上的数据则一般是保存在内存或者显存(独立显卡)上。由此可知,数据“保存”在硬盘上,“临时储存”在内存上,而CPU则是对数据进行修改性运算的。
有了上面对计算机硬件的了解,我们就不难理解什么是缓冲,什么是非缓冲了。
所有程序语言,包括VFP,它们的函数都是一些指导CPU进行运算的指令,每一个需要操作文件的指令,比如fopen(),都是需要先把硬盘上的数据,读取过来,然后再进行运算,最后保存回硬盘上。
结合前面对硬件的了解,我们不难看出,在数据的“读取—运算—回存”过程中,是存在差别的,这差别就是缓冲与非缓冲的区别。
应用了缓冲技术的“读取—运算—回存”过程,数据流是这样的:CPU先在内存上开辟一块区域,然后硬盘读取数据,临时存在内存开辟的那片指定区域上,当这片区域存储满的时候,CPU再对这些数据进行运算;运算完,再储存到内存的指定区域,当内存指定区域存满的时候,再一次性保存回硬盘,实现长期储存。
而非缓冲呢,则是,CPU直接到硬盘读取数据储存为内存变量,读取一点,就马上运算一点,运算完直接存回硬盘。
由此可知,当数据量小的时候,非缓冲I/O是系统直接的输入和输出,它不经过“缓冲区”,所以从速度和效率方面来说就显得快很多,但是当数据量比较大的时候,非缓冲I/O频繁地读取和储存数据,在速度和效率就会大打折扣。
OK,前面就是开心上社站长对缓冲与非缓冲的一些理解,非常浅显,希望权威人士能够予以斧正。本文原创自开心上社www.kxss.net,欢迎转载,转载请注明出处。