Buffer和Cache

简介:

Buffer和Cache的定义


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.

 

Cache


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。

 

Buffer


Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

 

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以方便下次被访问,这样可提高系统性能。


















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1627645 ,如需转载请自行联系原作者


相关文章
|
关系型数据库 MySQL 数据挖掘
MYSQL日期与时间函数的实用技巧
MYSQL日期函数与时间函数是数据库操作的关键工具,可轻松处理、查询、比较和格式化日期时间数据。它们能提取日期的年、月、日等部分,便于筛选和统计;同时,也能处理时间数据,如计算时间差、获取当前时间,助力用户更好地管理时间信息。掌握这些函数,不仅能提升数据库操作效率,还能为数据分析和报表生成提供有力支持。无论初学者还是资深数据库管理员,精通MYSQL的日期和时间函数都至关重要,以满足各种数据处理需求,确保数据的准确性和高效性。
823 0
|
1月前
|
并行计算 数据挖掘 5G
MATLAB R2024b 数据分析软件,安装详细步骤,附安装包
MATLAB R2024b 发布,聚焦性能提升与稳定性优化,支持GPU加速、5G/6G工具链及HDL代码生成,新增NPU硬件支持,配合深色界面与调试增强,助力高效科学计算与工程设计。
1113 3
|
数据采集 机器学习/深度学习 算法
阿里音乐流行趋势预测—冠军答辩(二)|学习笔记
快速学习阿里音乐流行趋势预测—冠军答辩(二)
569 0
|
11月前
|
Java 数据安全/隐私保护 开发者
【潜意识Java】深入理解 Java 面向对象编程(OOP)
本文介绍了Java中的面向对象编程(OOP)核心概念,包括封装、继承、多态和抽象。封装通过访问控制保护数据,提高安全性;继承支持代码复用,减少冗余;多态实现灵活的行为调用;抽象则隐藏细节,简化接口设计。掌握这些概念有助于编写高效、灵活且易于维护的代码。文章通过实例详细讲解了每个概念在Java中的应用,并总结了它们的优势。
570 3
|
Java 程序员 C++
抽象类 vs 接口:如何在实际项目中做出正确选择?
小米讲解了Java中的抽象类和接口,分析了两者的异同及使用场景。抽象类适合共享状态和行为逻辑,接口适用于提供统一行为规范,尤其在多继承场景下。文中通过实例说明了如何选择使用抽象类或接口,帮助开发者更好地理解这两者在实际开发中的应用。
352 0
|
数据采集 JavaScript 前端开发
TypeScript 和 jsdom 库创建爬虫程序示例
TypeScript 和 jsdom 库创建爬虫程序示例
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
354 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
STM32CubeMX FreeRTOS 任务的挂起和恢复
STM32CubeMX FreeRTOS 任务的挂起和恢复
466 12
|
负载均衡 Java 开发者
Ribbon框架实现客户端负载均衡的方法与技巧
Ribbon框架为微服务架构中的客户端负载均衡提供了强大的支持。通过简单的配置和集成,开发者可以轻松地在应用中实现服务的发现、选择和负载均衡。适当地使用Ribbon,配合其他Spring Cloud组件,可以有效提升微服务架构的可用性和性能。
215 0
|
机器学习/深度学习 算法 PyTorch
多模态融合在 FunAudioLLM 中的应用
【8月更文第28天】随着深度学习的发展,多模态融合技术已经成为构建更加智能和自然的人机交互系统的关键。FunAudioLLM(Fun Audio Language Model)是一种旨在结合音频与文本数据以实现更自然、更丰富的声音合成效果的框架。本文将详细介绍 FunAudioLLM 如何利用多模态融合技术,并提供具体的代码示例。
319 0