内存缓存

高速缓存(英语:cache,英语发音:/kæʃ/ kash [1][2][3],简称缓存),其原始意义是指访问速度比一般随机存取存储器(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。

原理
Cache一词来源于1967年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义,用于电脑工程领域。

当CPU处理数据时,它会先到Cache中去寻找,如果数据因之前的操作已经读取而被暂存其中,就不需要再从随机存取存储器(Main memory)中读取数据——由于CPU的运行速度一般比主内存的读取速度快,主存储器周期(访问主存储器所需要的时间)为数个时钟周期。因此若要访问主内存的话,就必须等待数个CPU周期从而造成浪费。

提供“缓存”的目的是为了让数据访问的速度适应CPU的处理速度,其基于的原理是内存中“程序执行与数据访问的局域性行为”,即一定程序执行时间和空间内,被访问的代码集中于一部分。为了充分发挥缓存的作用,不仅依靠“暂存刚刚访问过的数据”,还要使用硬件实现的指令预测与数据预取技术——尽可能把将要使用的数据预先从内存中取到缓存里。

CPU的缓存曾经是用在超级计算机上的一种高级技术,不过现今电脑上使用的的AMD或Intel微处理器都在芯片内部集成了大小不等的数据缓存和指令缓存,通称为L1缓存(L1 Cache即Level 1 On-die Cache,第一级片上高速缓冲存储器);而比L1更大容量的L2缓存曾经被放在CPU外部(主板或者CPU接口卡上),但是现在已经成为CPU内部的标准组件;更昂贵的CPU会配备比L2缓存还要大的L3缓存(level 3 On-die Cache第三级高速缓冲存储器)。

概念的扩充
如今缓存的概念已被扩充,不仅在CPU和主内存之间有Cache,而且在内存和硬盘之间也有Cache(磁盘缓存),乃至在硬盘与网络之间也有某种意义上的Cache──称为Internet临时文件夹或网络内容缓存等。凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为Cache。

地址镜像与变换
主条目:CPU缓存#组相联
由于主存容量远大于CPU缓存的容量,因此两者之间就必须按一定的规则对应起来。地址镜像就是指按某种规则把主存块装入缓存中。地址变换是指当按某种镜像方式把主存块装入缓存后,每次访问CPU缓存时,如何把主存的物理地址(Physical address)或虚拟地址(Virtual address)变换成CPU缓存的地址,从而访问其中的数据。

缓存置换策略
主条目:CPU缓存#置换策略、分页和缓存文件置换机制
主存容量远大于CPU缓存,磁盘容量远大于主存,因此无论是哪一层次的缓存都面临一个同样的问题:当容量有限的缓存的空闲空间全部用完后,又有新的内容需要添加进缓存时,如何挑选并舍弃原有的部分内容,从而腾出空间放入这些新的内容。解决这个问题的算法有几种,如最久未使用算法(LRU)、先进先出算法(FIFO)、最近最少使用算法(LFU)、非最近使用算法(NMRU)等,这些算法在不同层次的缓存上执行时拥有不同的效率和代价,需根据具体场合选择最合适的一种。

磁盘缓存

磁盘缓存

16MB缓冲区的硬盘
磁盘缓存(Disk Buffer)或磁盘快取(Disk Cache)实际上是将下载到的数据先保存于系统为软件分配的内存空间中(这个内存空间被称之为“内存池”),当保存到内存池中的数据达到一个程度时,便将数据保存到硬盘中。这样可以减少实际的磁盘操作,有效的保护磁盘免于重复的读写操作而导致的损坏。

磁盘缓存是为了减少CPU透过I/O读取磁盘机的次数,提升磁盘I/O的效率,用一块内存来储存存取较频繁的磁盘内容;因为内存的存取是电子动作,而磁盘的存取是I/O动作,感觉上磁盘I/O变得较为快速。

相同的技巧可用在写入动作,我们先将欲写入的内容放入内存中,等到系统有其它空闲的时间,再将这块内存的资料写入磁盘中。

大小
现在的磁盘通常有32MB或64MB缓存。旧的硬盘则有8MB或16MB。

磁盘缓存和内存缓存的区别相关推荐

  1. Glide 缓存策略 内存缓存和磁盘缓存

    感恩原创:http://www.cnblogs.com/baiqiantao/p/6808457.html Glide 缓存策略 内存缓存和磁盘缓存 官方文档:https://github.com/b ...

  2. Android 图片缓存之内存缓存技术LruCache,软引用

    Android 图片缓存之内存缓存技术LruCache,软引用

  3. 图片缓存之内存缓存技术LruCache,软引用

    图片缓存之内存缓存技术LruCache,软引用 每当碰到一些大图片的时候,我们如果不对图片进行处理就会报OOM异常, 这个 问题曾经让我觉得很烦恼 ,后来终于得到了解决, 那么现在就让我和大家一起分享 ...

  4. Java中缓存之内存缓存

    Java中缓存之内存缓存 1.缓存为什么要存在 应用服务器资源是有限的,数据库每秒中接受请求的次数也是有限的.如果利用有限的资源来提供尽可能大的吞吐量呢,一个办法:减少计 算量,缩短请求流程(减少网络 ...

  5. java map缓存6_Java内存缓存-通过Map定制简单缓存

    缓存 在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快.通过缓存,可以高效地重用之前检索或计算的数据. 为什么要用缓 ...

  6. iOS内存缓存和磁盘缓存的区别

    缓存分为内存缓存和磁盘缓存两种,其中内存是指当前程序的运行空间,缓存速度快容量小,是临时存储文件用的,供CPU直接读取,比如说打开一个程序,他是在内存中存储,关闭程序后内存就又回到原来的空闲空间:磁盘 ...

  7. 内存缓存(from memory cache)和硬盘缓存(from disk cache) 的区别

    引言 ?命中强制缓存时,资源会显示 from memory cache or from disk cache 两者的区别 内存缓存(from memory cache) 内存缓存具有两个特点,分别是快 ...

  8. YYCache 源码解析(一):使用方法,架构与内存缓存的设计

    YYCache是国内开发者ibireme开源的一个线程安全的高性能缓存组件,代码风格简洁清晰,阅读它的源码有助于建立比较完整的缓存设计的思路,同时也能巩固一下双向链表,线程锁,数据库操作相关的知识. ...

  9. 内存缓存(in-memory cache)

    内存缓存(in-memory cache) 当建立一个大型Java应用时,引起性能问题大部分是延迟,延迟是指请求和响应之间的时间差,在一个分布式Java系统中引起延迟的原因有: 从磁盘上加装数据的IO ...

最新文章

  1. 租约-分布式缓存一致性的高效容错机制
  2. mysql unsigned zerofill_Mysql中Unsigned和Zerofill数据型的使用(细节也很重要啊)
  3. ios 状态栏高度 底部tabbar高度
  4. 【模型训练-loss】模型训练过程中train, test loss的关系及原因
  5. c语言标准库 swap,swap
  6. jquery UI集合
  7. 大数据之-Hadoop3.x_Hadoop_MapReduce_介绍---大数据之hadoop3.x工作笔记0081
  8. 怎么调用获取被创建的预制体_PostgreSQL为每一个backend创建的cache
  9. html特殊符号拉丁文,拉丁文字符号大全,罗马字母
  10. 94页5万字市级应急平台建设方案
  11. centos7 安装最新rabbitmq,并设置开机自启
  12. wordpress登录美化css,wordpress的XIU主题显示美化css配置
  13. XMind8思维导图 破解版
  14. win10 文件夹设置区分大小写
  15. pm2日志文件过大问题解决
  16. 常见的DNS攻击与防御
  17. 千兆工业交换机和百兆以太网交换机有什么区别?
  18. php免费利用飞信发送验证码,PHP 使用飞信 API 来发送免费短信
  19. ubuntu删除提示权限不够permission denied,以及cannot remove “file“,is a directory.
  20. FFmpeg -- 解码视频

热门文章

  1. linux实验vim心得,Linux-vim教程(学习心得体会)
  2. 烟用香精计算机辅助调香,GC/MS结合计算机辅助调香系统在烟用香精配方解析中的应用...
  3. 取mailq队列的邮件
  4. uniapp请求接口返回:ER_SP_UNDECLARED_VAR: Undeclared variable: NaN 已解决
  5. 学历不高的程序员还有机会进BAT、网易等大厂吗?
  6. JXL导出EXCEL合并单元格、文字对齐方式 .
  7. IDC已是夕阳产业?2016传统IDC商何去何从
  8. Python变量的定义和使用
  9. input禁止中文输入
  10. 关于iOS系统中通讯录的访问