Caching(缓存)在现代的计算机系统中是一项最古老最基本的技术。它存在于计算机各种硬件和软件系统中,比如各种CPU, 存储系统(IBM ESS, EMC Symmetrix…),数据库,Web服务器,中间件等。它的一个重要的作用就是用于弥补不同速度的硬件之间的存取速度的差距,cache可以完全通过硬件实现(算法也是通过硬件实现的),也可以通过在更快硬件上通过软件控制来实现。

EMCSymmetrix之所以如此的昂贵,就是因为在这个系统中,提供了一个640G全相连的高速数据缓存(DRAM缓存),完全用硬件实现,就像一个放大版的CPU一级缓存。

Caching技术对于现代计算机系统之所以如此重要,就是在于,任何一个小的改进都会对整个计算机系统产生巨大的影响。因为cache具备一个特性,用最高的性价比可以实现我们希望得到的系统整体性能。

比如,磁盘和内存相比,磁盘具有大容量的特性,而内存具有高性能,但是对于同等容量,磁盘相比于内存来说非常廉价。这也就是我们不可能把所有磁盘都替换成内存(先不考虑永久存储的特性),即便这样我们可以获得非常高的I/O速度。那么如何解决这两者之间的不匹配?就是利用缓存技术。利用内存介质为磁盘做一层缓存。这样就可以在不多花额外费用的同时,得到速度和容量的平衡。

同样的道理存在于内存和CPU缓存之间。下图是Intel Core i7 5500系列各部件的访问速度:

访问速度

L1 Cache Hit

4 cycles

L2 Cache hit

10 cycles

L3 Cache hit, line unshared

40 cycles

L3 Cache hit, shared line in another core

65 cycles

L3 Cache hit, modified in another core

75 cycles

Remote L3 cache

100~300 cycles

Local RAM

60 ns

Remote RAM

100 ns

从这里我们可以看到缓存对于系统性能的重要性。但是我们要达到理想的性能,还必须提高缓存的命中率,这样缓存才可以最大限度的得到利用。

闲话Cache:始篇的更多相关文章

  1. (36)Spring Boot Cache理论篇【从零开始学Spring Boot】

    Spring Boot Cache理论篇 在上一篇中我们介绍了Spring Boot集成Redis的实战例子,里面使用到了Spring Cache,那么什么是Spring Cache呢,本章将会做一个 ...

  2. SpringBoot日记——Cache缓存篇

    通常我们访问数据的情况如下图,数据存缓存就取缓存,不存缓存就取数据库,这样可以提升效率,不用一直读取数据库的信息: 开始记录: 关于SpringBoot缓存的应用 1. 首先在pom.xml文件中添加 ...

  3. 奇妙的go语言(開始篇)

    [ 声明:版权全部.欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 从前接触脚本语言不多,可是自从遇到go之后,就開始慢慢喜欢上了这个脚本语言.go语言是goog ...

  4. (翻译)Google Guava Cache

    翻译自Google Guava Cache This Post is a continuation of my series on Google Guava, this time covering G ...

  5. 57. Spring 自定义properties升级篇【从零开始学Spring Boot】

    之前在两篇文章中都有简单介绍或者提到过 自定义属性的用法: 25.Spring Boot使用自定义的properties[从零开始学Spring Boot] 51. spring boot属性文件之多 ...

  6. 54. spring boot日志升级篇—logback【从零开始学Spring Boot】

    在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...

  7. 52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】

    在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需 ...

  8. JS-正则表达式实战篇(Angel著)

    JS-正则表达式实战篇(Angel著) 大家会看到我最新的系列博客都是spring boot怎么突然来了一个js的呢,而且这个貌似对大家而言好像很简单的嘛,所以在写之前我说说我写这一篇文章的初衷.公司 ...

  9. TGL站长关于常见问题的回复

    问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...

随机推荐

  1. Notify通知

    1.NotificationManager类对象         <1>getSystemService(Context.NOTIFICATION_SERVICE) 获取通知管理对象   ...

  2. DOS攻击和DDOS攻击有啥区别啊

    DDOS是DOS攻击中的一种方法. DoS:是Denial of Service的简称,即拒绝服务,不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务. ...

  3. hdu 5253 最小生成树

    赤裸裸最小生成树,没啥说的,我用kruskal过的 /* * Author : ben */ #include <cstdio> #include <cstdlib> #inc ...

  4. storm流式大数据处理流行吗

    在如今这个信息高速增长的今天,信息实时计算处理能力已经是一项专业技能了,正是因为有了这些需求的存在才使得分布式,同时具备高容错的实时计算系统Storm才变得如此受欢迎,为什么这么说呢?下面看看新霸哥的 ...

  5. Arduino uno R3 ISP刷Rootloader for arduino pro mini

    找了好久才发现的,好东西.介绍怎么使用uno对mini 刷Rootloader **SOLUTION** Reinstall the Arduino Pro Mini Bootloader using ...

  6. Spark1.0.x入门指南

    1 节点说明   IP Role 192.168.1.111 ActiveNameNode 192.168.1.112 StandbyNameNode,Master,Worker 192.168.1. ...

  7. Strider-test 相关配置

    package.json { "name": "test-node", "version": "0.0.0", &quo ...

  8. 关于ES6扩展属性

    ES6 let和const let命令 只在代码块作用域内有效 不存在变量提升(不能在申明之前赋值) 暂时性死区(在区域内不受外部变量影响) 不允许重复申明(在相同代码块区域内) 块级作用域 let为 ...

  9. [POJ] #1003# Hangover : 浮点数运算

    一. 题目 Hangover Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 116593   Accepted: 56886 ...

  10. samba服务设置,Linux系统和Windows文件共享

    samba是一个工具套件,在Unix上实现SMB(Server Message Block)协议,或者称之为NETBIOS/LanManager协议.SMB协议通常是被windows系列用来实现磁盘和 ...