缓冲与缓存
字面含义
缓冲:缓和冲击
缓存:临时存储
区别
简单来说缓冲偏重于写,而缓存偏重于读。
Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,大量时间在忙着处理开始写和结束写这两件事,而开始读写与终止读写所需要的时间很长。所以用buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小了,写入效率也高了。
缓存(Cache)的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次可能还要用到这个结果,就把结果放手边一个好拿的地方存着,不用就算了。
缓冲
缓冲区概念
缓冲区(buffer)是内存空间的一部分,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,显然缓冲区是具有一定大小的。
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
为什么要引入缓冲区
高速设备与低速设备的不匹配,会让高速设备花时间等待低速设备,所以在这两者之间设立一个缓冲区。
缓冲区的作用
1.可以解除高速设备与低速设备的不匹配,高速设备把数据直接送往缓冲区,不用再等待低速设备,提高了计算机的效率。例如:我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机的缓冲区,打印机再自行逐步打印,这时CPU就得到解放,可以处理别的事情。
2.可以减少数据的读写次数,如果每次数据只传输一点数据,就需要传送很多次,很浪费时间,因为开始读写与终止读写所需要的时间很长。如果将数据送往缓冲区,待缓冲区满后再进行传送会大大减少读写次数,这样就可以节省很多时间。例如:我们想将数据写入到磁盘中,不是立马将数据写到磁盘中,而是先输入缓冲区中,当缓冲区满了以后,再将数据写入到磁盘中,这样就可以减少磁盘的读写次数,不然磁盘很容易坏掉。
简单来说,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来存储数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
缓冲区的类型
缓冲区分为三种类型:全缓冲、行缓冲和不带缓冲。
1、全缓冲
在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。
2、行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。
3、不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。
缓冲区的刷新
下列情况会引发缓冲区的刷新:
1、缓冲区满时
2、关闭文件
缓冲区满或关闭文件时都会刷新缓冲区,进行真正的I/O操作。
缓冲区刷新,当缓冲区满的时候,新添加来的数据会直接将之前的数据覆盖,这样缓冲区里的数据就发生了改变或者说刷新。
比如在Linux下,操作命令行就属于常见的行缓冲模式,输入一行命令ls,命令ls就会进入到缓冲区内,不输入回车的话,什么也不会发生,当输入回车就会执行真正的IO操作。
缓存(cache)
cache是一个非常大的概念。
CPU的Cache
CPU的Cache,它中文名称是高速缓冲存储器,读写速度很快,几乎与CPU一样。由于CPU的运算速度太快,内存的数据存取速度无法跟上CPU的速度,所以在cpu与内存间设置了cache为cpu的数据快取区。当计算机执行程序时,数据与地址管理部件会预测可能要用到的数据和指令,并将这些数据和指令预先从内存中读出送到Cache。一旦需要时,先检查Cache,若有就从Cache中读取,若无再访问内存,现在的CPU还有一级cache,二级cache。简单来说,Cache就是用来解决CPU与内存之间速度不匹配的问题,避免内存与辅助内存频繁存取数据,这样就提高了系统的执行效率。CPU的cache越大,级数越多,CPU的访问速度越快。
硬盘的cache
磁盘也有cache,硬盘的cache作用就类似于CPU的cache,它解决了总线接口的高速需求和读写硬盘的矛盾以及对某些扇区的反复读取。
浏览器缓存
浏览器缓存(Browser Caching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览,并且可以减少服务器的压力。这个过程与下载非常类似,不过下载是用户的主动过程,并且下载的数据一般是长时间保存,游览器的缓存的数据只是短时间保存,可以人为清除。