Linux 内存管理中的 Buffers 和 Cached:理解和区分
引言
当涉及到 Linux 系统的内存管理时,“Buffers” 和 “Cached” 是两个经常会引起混淆的术语。这两个概念都代表了系统内存的一部分,但它们的作用和工作方式有所不同。
区别:
- Buffers:
- Buffers(缓冲区)是用于存储文件系统元数据(metadata)的内存。这包括文件的修改时间、权限和其他文件属性。
- Buffers 通常用于文件系统操作,如读取或写入文件时,数据首先会暂时存储在 Buffers 中,以便提高读取和写入的效率。
- Buffers 的大小取决于文件系统和其设置的内核参数,通常是为了提高文件系统性能而保留的一部分内存。
- Cached:
- Cached(缓存)是用于存储已经从磁盘读取的文件的副本。这些文件可能是系统使用频繁的文件,存储在内存中可以加快对它们的访问速度。
- Cached 内存是由 Linux 内核自动管理的,用于提高系统性能。当系统有足够的空闲内存时,会将一些文件的副本保留在 Cached 中,以便以后快速访问。
在 Linux 系统中,经常会遇到两个内存相关的概念:Buffers 和 Cached。这两者虽然都与系统内存有关,但却有着不同的作用和用途。我们将在这里深入探讨 Buffers 和 Cached 的区别,以及它们在系统中的作用。
当谈论 Linux 系统的 Buffers 时,我们可以通过示例代码来演示一些基本的文件读写操作,以解释 Buffers 在文件系统操作中的作用。下面是一个简单的 Python 脚本示例,说明了文件读取和写入操作对 Buffers 的影响:
# 创建一个测试文件
with open('test_file.txt', 'w') as file:file.write("This is a test file for demonstrating Buffers in Linux.")# 读取文件内容
with open('test_file.txt', 'r') as file:data = file.read()print("File content:", data)# 在文件末尾追加内容
with open('test_file.txt', 'a') as file:file.write("\nAdditional data appended to the file.")# 再次读取文件内容
with open('test_file.txt', 'r') as file:data = file.read()print("Updated file content:", data)
以上代码展示了如何创建一个文件、读取文件内容以及在文件末尾追加新内容。在这个过程中,文件系统会使用 Buffers 来存储文件的元数据信息,例如文件的权限、修改时间等。每次文件读写操作都会涉及到 Buffers,它们有助于提高文件系统的读取和写入效率。
接下来是 Cached 内存,一个常见的例子是多次读取相同文件的操作。下面还是一个 Python 的示例代码,展示了如何多次读取相同文件并检查读取速度的变化,说明了 Cached 内存对于重复访问文件的影响:
import timedef read_file():start_time = time.time()with open('test_file.txt', 'r') as file:data = file.read()end_time = time.time()return end_time - start_time# 第一次读取文件
time_taken_initial = read_file()
print(f"Time taken for initial file read: {time_taken_initial:.5f} seconds")# 第二次读取文件(使用 Cached 内存)
time_taken_cached = read_file()
print(f"Time taken for cached file read: {time_taken_cached:.5f} seconds")
在这个示例中,首先读取一个文件并记录所需的时间(这是第一次读取)。然后,再次读取相同的文件,记录读取所需的时间(这是第二次读取)。由于第二次读取时文件已经在 Cached 内存中,所以读取速度通常会更快。
在实际应用中,了解 Buffers 和 Cached 的区别对于优化系统性能是非常有帮助的。合理利用 Buffers 和 Cached,可以提高文件系统的读写效率,加快对常用文件的访问速度,从而改善系统的响应能力。
总之,Buffers 和 Cached 在 Linux 系统中扮演着不同的角色,前者用于存储文件系统元数据,而后者则用于存储已读取的文件副本。理解这两者的区别可以帮助我们更好地管理和优化系统内存,提高系统的整体性能和响应速度。
相关文章:
Linux 内存管理中的 Buffers 和 Cached:理解和区分
引言 当涉及到 Linux 系统的内存管理时,“Buffers” 和 “Cached” 是两个经常会引起混淆的术语。这两个概念都代表了系统内存的一部分,但它们的作用和工作方式有所不同。 区别: Buffers: Buffers(缓冲区࿰…...

Linux——使用命令查看文件和文件夹数量
目录 一、相关命令参数解析二、查看当前目录下的文件数量2.1 包含子目录中的文件2.2 不包含子目录中的目录 三、查看当前目录下的文件夹个数3.1 不包含目录中的目录3.2 包含目录中的目录 四、查看当前文件夹下叫某某的文件的数量实例 五、总结 一、相关命令参数解析 "&qu…...

[蓝桥杯训练]———高精度乘法、除法
高精度乘法、除法 一、高精度乘法⭐1.1 初步理解1.1.1 高精度的定义1.1.2 为什么会有高精度1.1.3 高精度乘法的复杂度 1.2 思想讲解1.3 代码实现1.3.1 声明1.3.2 实现高精度乘法1.3.3 整体实现1.3.4 代码测试 二、高精度除法⭐2.1 初步理解2.2 思想讲解2.3 代码实现2.3.1 声明2…...

使用javascript 点击tab栏切换事件代码记录
如下图实现以下两点功能: 这里做代码记录 1. javascript 点击tab栏动态切换内容,并添加active 2. javascript 点击左右图标可以向左或者向右移动元素 第1点功能: // tab栏 <div class"left"><span class"tab act…...

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例
零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例 1、零基础编程入门视频教程,系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…...

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(订单和AOP)
计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现(订单和AOP) 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先,通过深入分析项目所需数据,包括用户、商品、商品类别、收藏、订单、购物车…...

【Skynet 入门实战练习】实现网关服务 | 用户代理 | RPC 协议 | 客户端
文章目录 前言网关服务RPC 协议看门狗服务代理服务客户端逻辑梳理 前言 上两章学习了如何搭建一个项目,简单实现了几个基础模块。本章节会实现基本的客户端与服务端的通信,包括网关(gate)、看门狗(watchdog࿰…...

eclipse - jee 建立项目后没有 web.xml
eclipse -- jee 建立项目后没有 web.xml 处理它的方法是,点 File - New - Dynamic Web Project , 此时起一个项目名如M4 然后next 然后next 出现如此所示:...
Miniconda虚拟环境安装(chatglm2大模型安装步骤二)
1.服务器配置 服务器系统:Centos7.9 x64 显卡:RTX3090 (24G) 2.安装环境 2.1 检查conda是否安装 输入命令:conda -V 如果显示conda 4.7.12,说明已经有不需要安装 2.2 安装Miniconda 在家目录建一个mi…...

C++学习之路(四)C++ 实现简单的待办事项列表命令行应用 - 示例代码拆分讲解
本期示例介绍: 本期示例《待办事项列表应用》展示了一个简单的任务管理系统,用户可以通过命令行界面执行添加任务、删除任务和显示任务列表等操作。 功能描述: 添加任务功能: 用户可以输入任务描述,将新的任务添加到任务列表中。…...

函数指针数组指针数组传参的本质字符指针
🚀 作者:阿辉不一般 🚀 你说呢:不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞…...
Linux swapon命令教程:如何在Linux中启用和禁用交换空间(附实例教程和注意事项)
Linux swapon命令介绍 Linux的swapon命令用于启用指定设备和文件的交换。当物理内存(RAM)达到其最大容量时,Linux使用交换空间。如果系统需要更多的内存,而RAM不足,内存中的非活动页面将被移动到交换空间。交换空间是…...

云计算领域的第三代浪潮!
根据IDC不久前公布的数据,2023年上半年中国公有云服务整体市场规模(IaaS/PaaS/SaaS)为190.1亿美元,阿里云IaaS、PaaS市场份额分别为29.9%和27.9%,都远超第二名,是无可置疑的行业领头羊。 随着人工智能(AI)…...
面试题目总结(一)
1. 谈谈数据库的乐观锁和悲观锁 乐观锁和悲观锁是数据库并发控制中常用的两种策略,用于处理多个事务同时访问和修改同一个数据时的并发冲突问题。 数据库的乐观锁是指在读取数据时,不对数据进行加锁,而是在更新数据时检查数据版本是否发生变…...
建造者设计模式
3. 建造者设计模式 3.1 原理 Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。 建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”地创建不同的对象。 创建者模式主要包含以…...

YOLO目标检测——垃圾检测数据集下载分享【含对应voc、coco和yolo三种格式标签】
实际项目应用:智能化垃圾分类系统、垃圾回收和处理领域的优化管理等方面数据集说明:垃圾分类检测数据集,真实场景的高质量图片数据,数据场景丰富,含报纸、蛋壳、矿泉水瓶、电池、拉链顶罐、塑料餐盒、纸质药盒、香蕉皮…...
Vue CLI的介绍【vue利器之一】
文章目录 前言Vue CLI 介绍CLICLI 服务CLI 插件后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:vue.js 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误&am…...
【学习笔记】插值之拉格朗日插值(Lagrange)
0 插值介绍 插值法是广泛应用于理论研究和工程实际的重要数值方法。用提供的部分离散的函数值来进行理论分析和设计都是极不方便的,因此希望能够用一个既能反映原函数特征,又便于计算的简单函数去近似原函数。 1 低次拉格朗日插值 定理:设…...

无人机电力巡检系统运行流程全解读
随着电力行业体系不断完善,保障电网运营的安全成为至关重要的任务。传统的人工巡检方式在面对电力设备广泛分布和复杂工况时显得效率低下,为了解决这一难题,无人机电力巡检系统应运而生,以智能化的运行流程,为电网安全…...
有关全局变量和sizeof的题
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int i; int main() {i--;if (i > sizeof(i)){printf(">");}else{printf("<");}return 0; } 这道题结果是 > 首先对于一个全局变量,当没有对其初始化时,它…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...