CPU多核并发缓存架构

为什么要加入缓存

从主内存中读取数据的时候,会经过系统总线以及内存总线,这时会受到总线的限制,速度会大大降低。而且会存在众多问题。读入缓存,下次用时从缓存读取,效率会大大提高。

如何解决缓存不一致问题

  • 为什么会缓存不一致?
    如果左边CPU改变了主内存中读取的一个数据,而右边CPU也刚好访问访问 这个数据,那么读到的就会是为改变的值,造成缓存不一致问题
  • 怎么解决缓存不一致问题
    为了解决缓存一致性问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作。常用的方法是总线加锁或缓存一致性协议-MESI

什么是缓存一致性协议

MESI代表四种状态:

  • M:修改
  • E:独享、互斥
  • S:共享
  • I:无效

MESI缓存一致性协议原理

  • 假如现在有CPU1和CPU2,主内存有变量X= 1 。现在要做 x+1的操作。 如果在变量 x = 1
  • 上加上volatile,则就会触发MESI 当CPU1从主内存中读取到X=1时,CPU1会把此变量标记成独享状态
  • 并监听总线,是否有其它CPU去读取此变量 当CPU2从主内存中读取X=1变量时,CPU1会通过嗅探机制监听到。
  • 此时CPU1的X变量会变成共享状态。继续进行计算,计算完变成X=2。
  • 此时要回写到主内存之前。先锁住缓存行。并标记X变量为修改状态。并向总线发消息。 其它CPU2监听总线时,会监听到,并把X标记成无效状态。
  • CPU1把变量X=2回写到主内存后,会由修改状态变成独享状态。
  • 此时,如果CPU2如果想修改X变量时,要重启从主内存中读取。然后开始新的轮回

指令重排

  • 为了使得处理器内部的运算单元能尽量被充分利用,处理器可能会对输入代码进行乱序执行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序执行的结果重组,保证该 结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的 顺序一致。因此,如果存在一个计算任务依赖另一个计算任务的中间结果,那么其顺序性并不 能靠代码的先后顺序来保证。
  • 与处理器的乱序执行优化类似,Java虚拟机的即时编译器中也有 类似的指令重排序(Instruction Reorder)优化

CPU多核并发缓存架构介绍相关推荐

  1. 深入理解并发内存模型||JMM与内存屏障||多核并发缓存架构 ||JMM内存模型||volatile 关键字的作用 ||JMM 数据原子操作||JMM缓存不一致的问题

    深入理解并发内存模型||JMM与内存屏障 多核并发缓存架构 JMM内存模型 volatile 关键字的作用 JMM 数据原子操作 JMM缓存不一致的问题

  2. 亿级流量电商详情页系统实战-25.亿级流量商品详情页的多级缓存架构介绍

    1.前言 很多人以为,有了redis缓存,就可以支持对高并发的业务场景了.其实做复杂的缓存,如支撑电商复杂的场景下的高并发的缓存,遇到的问题是非常非常之多,绝对不是说简单的访问一下redis就可以了. ...

  3. 剑指offer之java缓存总结,从单机缓存到分布式缓存架构

    1.缓存定义 高速数据存储层,提高程序性能 2.为什么要用缓存(读多写少,高并发) 1.提高读取吞吐量 2.提升应用程序性能 3.降低数据库成本 4.减少后端负载 5.消除数据库热点 6.可预测的性能 ...

  4. 让国内顶尖程序员低头的这份面试题之java缓存总结,从单机缓存到分布式缓存架构

    1.缓存定义 高速数据存储层,提高程序性能 2.为什么要用缓存(读多写少,高并发) 1.提高读取吞吐量 2.提升应用程序性能 3.降低数据库成本 4.减少后端负载 5.消除数据库热点 6.可预测的性能 ...

  5. 亿级流量电商详情页系统实战:缓存架构+高可用服务架构+微服务架构

    <缓存架构+高可用服务架构+微服务架构>深入讲解了亿级流量电商详情页系统的完整大型架构.同时最重要的是,在完全真实的大型电商详情页系统架构下,全流程实战了整套微服务架构,包含了基于领域驱动 ...

  6. 并发编程之CPU缓存架构缓存一致性协议详解(二)

    并发编程之CPU缓存架构&缓存一致性协议详解 CPU高速缓存(Cache Memory) CPU高速缓存 在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就 ...

  7. JVM——CPU缓存架构与Java 内存模型

    导航 一.CPU缓存架构与一致性协议 1.1 CPU缓存架构 1.2 缓存行与伪共享问题 1.3 MESI 缓存一致性协议 1.4 伪共享的解决办法 二.JMM Java 内存模型 2.1 JMM 简 ...

  8. 多CPU 多核CPU | 多进程 多线程 | 并行 并发

    文章目录 区分 多CPU && 多核CPU CPU缓存 并行 && 并发 多CPU && 多核CPU | 多进程 && 多线程 | 并行 ...

  9. 设计高并发架构与系统多级缓存架构如何设计?

    高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己 ...

最新文章

  1. 非法关机 mysql_一次非法关机造成mysql数据表损坏的例子
  2. HTTP协议SSL协议HTTPS协议
  3. 国庆期间,我造了台计算机
  4. TIS教程04-客户端
  5. 带有Netflix Ribbon的Spring Cloud Rest Client-基础知识
  6. 正整数 n 所有可能的和式的组合
  7. KMP算法———模板
  8. 项目管理学习总结(17)——关于前后端分离的分析
  9. Netty工作笔记0013---Channel应用案例4Copy图片
  10. python3.5.4安装_linux-centos系统下安装python3.5.4步骤
  11. 群晖硬盘已损毁 Linux 修复,通用解决方案:修复Synology系统硬盘损坏
  12. 实操:将C盘用户配置文件移动到非系统盘(windows10系统)
  13. 大家保险发布“早下班一小时”倡议,呼吁“重阳节,不脱节”
  14. 易语言浏览本地html,简单的易语言读取网页文本程序
  15. 给大家分享一些IT网课资源的学习网站啦
  16. java 斗地主洗牌发牌
  17. JS逆向:猿人学爬虫比赛第五题详细题解(下)
  18. 移动端测试和开发工作中常用的安卓开发者选项
  19. 廉价底板套胶对比总结
  20. 磁盘挂载失败Couldn't create temporary archive name

热门文章

  1. redhat7.3安装yum源 基于外网的http服务
  2. 清北学堂----北京集训
  3. 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 4:Debugging: Gradient Checking
  4. Linux本地无法登录,远程却可以登录
  5. CodeForces 297A Parity Game (脑补题)
  6. ubuntu下安装RabbitVCS(失败记录)
  7. 在cs后台页面获取input的值方法
  8. 七个你可能不了解的CSS单位
  9. 博客系统如何随机插入大量文章数据
  10. H5实例 移动端页面练习