Buffer和Cache的区别

Buffer和Cache的区别
buffer与cache操作的对象就不一样。

buffer(缓冲)是为了提高内存和硬盘(或其他I/0设备)之间的数据交换的速度而设计的。

cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计,也就是平常见到的一级缓存、二级缓存、三级缓存。

cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存之间增加了cache,它的速度比内存快,但是造价高,又由于在cpu内不能集成太多集成电路,所以一般cache比较小,以后intel等公司为了进一步提高速度,又增加了二级cache,甚至三级cache,它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的。

缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。

修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。–两者都是RAM中的数据。

简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。

buffer是由各种进程分配的,被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。

cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提高系统性能。

BufferCache有诸多区别。从定义用途来看,Buffer是一块临时存储区域,用于临时保存数据,以便在数据传输或处理期间进行中转调整,主要用于解决不同部分之间数据传输速度不匹配的问题,常见于数据传输输入/输出操作中,例如在网络通信、文件读写音视频流传输中,帮助平衡不同速度组件之间的数据流,避免数据丢失或数据处理速度不足的问题;而Cache是为了提高系统性能,将经常访问的数据进行缓存,如多个进程都要访问某个文件,该文件便被做成Cache以方便下次被访问[^3]。 从数据流向角度,Buffer是即将要被写入磁盘的,是由各种进程分配的,被用在如输入队列等方面,比如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在Buffer中保存;Cache则是被从磁盘中读出来的,是为了减少对磁盘的频繁读取操作[^1]。 从功能本质来说,Buffer侧重于存储速度不同步的设备或优先级不同的设备之间传输数据,通过Buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到Buffer,达到一定程度存储快的设备再读取Buffer的数据,在此期间存储快的设备CPU可以干其他的事情,从而使速度慢的设备读入数据时,速度快的设备的操作进程不发生间断;Cache主要是为了提高数据的访问速度,避免重复的慢速数据读取操作[^2]。 ```python # 简单模拟buffercache的使用场景 # 模拟buffer存储数据 buffer = [] for i in range(10): buffer.append(i) if len(buffer) == 5: # 模拟将buffer数据写入磁盘或其他设备 print("Writing buffer data:", buffer) buffer = [] # 模拟cache存储数据 cache = {} data_to_cache = [11, 12, 13] for data in data_to_cache: cache[data] = True # 模拟再次访问数据时先从cache查找 for data in data_to_cache: if data in cache: print(f"Data {data} found in cache") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值