相关文章:

《MySQL:更新过程(buffer pool与redo、bin、undo log)》

《Redis:持久化RDB与AOF》

《Java8之BufferedInputStream源码》

写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正。

本文属于临时起意写的,仅作为备忘录使用,内容比较少,后续有机会的话可能会做一些补完。

目录

一、Cache

1、Page Cache

2、CPU Cache

二、Buffer

三、Cache 和 Buffer的区别


一、Cache

在现代计算机系统中,CPU,RAM,DISK的速度不相同。CPU与RAM之间,RAM与DISK之间的速度差异常常是指数级。为了在速度和容量上折中,在CPU与RAM之间使用CPU cache以提高访存速度,在RAM与磁盘之间,操作系统使用page cache提高系统对文件的访问速度。

1、Page Cache

在之前的文章中有介绍过内存中的数据写回磁盘的策略:

(1)在MySQL中redo log的写回

(2)在Redis中AOF文件的落地:

我们都提到了可以利用操作系统的缓存来临时存储将要写回磁盘的数据,这个缓存空间被叫做磁盘高速缓存(Page Cache)。

操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对高速缓存复制的访问要比原始数据访问更为高效。例如,正在运行的进程的指令既存储在磁盘上,也存储在物理内存上,也被复制到CPU的二级和一级高速缓存中。

不过,磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器,而是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存在逻辑上属于磁盘,物理上则是驻留在内存中的盘块。

高速缓存在内存中分为两种形式:一种是在内存中开辟一个单独的存储空间作为磁速缓存,大小固定;另一种是把未利用的内存空间作为一个缓沖池,供请求分页系统和磁盘I/O时共享。

2、CPU Cache

首先,我们都知道现在的CPU多核技术,都会有几级缓存,老的CPU会有两级内存(L1和L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示:

其中:

  • L1缓存分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。
  • L1和L2缓存在每一个CPU核中,L3则是所有CPU核心共享的内存。
  • L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢。

        我们来看一些他们的速度:

  • L1 的存取速度:4 个CPU时钟周期
  • L2 的存取速度: 11 个CPU时钟周期
  • L3 的存取速度:39 个CPU时钟周期
  • RAM内存的存取速度:107 个CPU时钟周期

我们可以看到,L1的速度是RAM的27倍,但是L1/L2的大小基本上也就是KB级别的,L3会是MB级别的。

以上就是Page Cache与CPU Cache的基本介绍,可以看出,cache 的作用主要是为了弥补高速设备和低速设备的速度差,最终起到加快访问速度的作用。

二、Buffer

在之前讲解BufferedInputStream源码的文章里,对buffer已经做了介绍,简单来说就是整合流量,每次读写都进行批量操作。

引入缓冲区的目的主要有:

  • 缓和CPU与I/O设备间速度不匹配的矛盾。
  • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
  • 解决基本数据单元大小(即数据粒度)不匹配的问题。
  • 提高CPU和I/O设备之间的并行性。

三、Cache 和 Buffer的区别

1、Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。

2、Cache(缓存)则是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。

3、假定以后存储器访问变得跟CPU做计算一样快,cache就可以消失,但是buffer依然存在。比如从网络上下载东西,瞬时速率可能会有较大变化,但从长期来看却是稳定的,这样就能通过引入一个buffer使得OS接收数据的速率更稳定,进一步减少对磁盘的伤害。

缓存(cache)与缓冲(buffer)相关推荐

  1. 缓存cache和缓冲区buffer

    一.cache 1.cache的定义.从宏观上讲,缓存是处理速度不匹配的问题.可以是静态缓存(内存缓存.磁盘缓存).动态缓存(前端的缓存)和数据库缓存.另一个角度,从CPU来看,可以是寄存器和内存之间 ...

  2. 缓冲区(Buffer)与缓存(Cache)异同

    缓冲区(Buffer)定义 缓冲区(Buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具 ...

  3. 缓存系列之一:buffer、cache与浏览器缓存

    缓存系列之一:buffer.cache与浏览器缓存 一:缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如CPU的一级.二级缓存是保 ...

  4. 缓冲区(buffer)与缓存(cache)

    下面介绍缓冲区的知识. 一.什么是缓冲区 缓冲区(buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区, ...

  5. 计算机缓存Cache以及Cache Line详解

    转载: 计算机缓存Cache以及Cache Line详解 - 围城的文章 - 知乎 https://zhuanlan.zhihu.com/p/37749443 L1,L2,L3 Cache究竟在哪里? ...

  6. Java 中常用缓存Cache机制的实现

    /* *所谓缓存,就是将程序或系统经常要调用的对象存在内存中,以便其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. *内存缓存,也就是实现一个类中静态Map,对 ...

  7. php smarty安装,php smarty 安装 、配置、使用 及缓存cache的配置使用

    cache 使用: cache配置: $smarty->cache_dir = "/caches/";  //缓存目录 $smarty->caching = true; ...

  8. 转载:缓存 Cache

    /// <summary>         /// 缓存函数         /// </summary>         /// <param name="p ...

  9. 计算机缓存Cache机制理解

    1.计算机存储体系简介 存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小.寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级, ...

最新文章

  1. python中collections_Python中的collections模块
  2. 剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?
  3. php 大批量的删除图片,PHP批量删除记录同时删除图片文件
  4. 【转】ubuntu 开机sudo启动应用程序
  5. 数据库的备份 mysql
  6. CString转化问题
  7. 【九】Jmeter 实现验证码登录
  8. abaqus帮助文档_Abaqus 屈曲特征值求解 非线性屈曲分析
  9. 【sketchup 2021】草图大师的高级工具使用3【复杂贴图制作实例(山体和球面贴图、全景天空绘制、吊顶添加光带)、图层(标记)工具使用、视图与样式工具的常规使用与高级使用说明】
  10. ap计算机知识点总结,AP统计学考试知识点汇总
  11. hotmail邮箱设置
  12. 储物点的距离【前缀和】
  13. OpenCV 微信QRCode二维码
  14. 叮咚,ps术语请查收~
  15. 数据结构之排序 --- 插入排序
  16. 记一次java实现excel导出
  17. STM32单片机低功耗剖析
  18. Apple iPad:过渡设备还是平板电脑?
  19. Spring自定义数据源配置不当引起的Mybatis拦截器Interceptors 失效/不生效
  20. arcgis多面体要素转面_【干货】ArcGIS 9.3线转面的方法

热门文章

  1. python根据输入的利润求奖金_【每日一练】巧用python实现利润计算
  2. ADworld pwn wp - play
  3. Python技巧——巧用globals
  4. 照妖镜验号API接口(2023.4月更新接口文档)
  5. Java数据按照时间排序
  6. 《C语言动漫对话教程(入门篇)》
  7. CAS 3.2.1内外网映射问题的解决办法
  8. 基于QWidget的屏幕水印和QImage的背景水印实现
  9. Java多线程从基础到并发模型统统帮你搞定
  10. 7_24homework