cache 和 buffer的区别
A buffer is something that has yet to be “written” to disk.
A cache is something that has been “read” from the disk and stored for later use ;
对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存
Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。从而使速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache
它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的
查看CPU的 L1、L2、L3
[root@localhost ~]# ll /sys/devices/system/cpu/cpu0/cache/
总用量 0
drwxr-xr-x. 2 root root 0 8月 12 11:21 index0#一级cache中的data和instruction cache
drwxr-xr-x. 2 root root 0 8月 12 11:21 index1#一级cache中的data和instruction cache
drwxr-xr-x. 2 root root 0 8月 12 11:21 index2#二级cache,共享的
drwxr-xr-x. 2 root root 0 8月 12 11:21 index3#三级cache,共享的
总结
cache 是cpu与内存间的,buffer是内存与磁盘间的,都是为了解决速度不对等问题
CPU中的Cache和free中的cache不是一个概念
free中的cache是Page cache,它实际上是针对文件系统的,是文件的缓存
CPU中的Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。
大致来说数据是通过内存-Cache-寄存器,Cache缓存则是为了弥补CPU与内存之间运算速度的差异而设置的的部件
缓冲技术(buffer)是为了协调IO和CPU之间的速度不一致而存在的一种设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,以减少CPU中断次数,提高程序效率,从而提高系统性能;linux有一个守护进程定期 清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。
缓存技术(cache)则是通过将CPU最为频繁访问的数据保存在特定区域,并具有优先被访问权,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除,这样提高CPU对数据的获取效率来提高程序运行效率
修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。–两者都是RAM中的数据
缓冲区(buffer)和内存缓存区(cache)都属于内存的一部分,而Cache也可以是磁盘的一部分,但在底层设计上,Cache是由静态RAM构成的,它比用于Buffer的动态RAM更快;
Cache是高速存储区域,而Buffer是RAM的临时存储的正常存储区域;
Buffer主要用于输入/输出过程,而Cache则用于从磁盘读取或写入进程;
在Cache不能使用的情况下,可以在键盘中使用Buffer来编辑键入错误
参考文档