博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JMM模型1
阅读量:3951 次
发布时间:2019-05-24

本文共 1570 字,大约阅读时间需要 5 分钟。

在这里插入图片描述

由于 CPU 的 运算速度远远 大于 Main Memory 主存的速度,所以要 使用一个 Cache 来进行缓存(CPU的频率太卡了,这样在处理器的时钟周期内,CPU常常需要等待主存,浪费资源)

最早的时候 单核 CPU 是这种方法

在这里插入图片描述在这里插入图片描述

CPU 的缓存分 L1,L2,L3, 他们比内存快,但是贵,只能用作高速缓存,CPU 查找数据的时候先去 L1, 然后去看L2,如果没有就去内存,还有些机器带了 L3 cache,多一级也是为了提高速度

高速缓存器 Cache 是位于 CPU core 和内存将的寄存器,容量比内存小,但是交换速度快,用于缓存CPU 内短时间即将访问到的小数据。CPU 中加入 Cache 这样整个内存储器(cache+内存) 就兼具了 Cache的高速 和 内存的大容量的优点。而Cache 对 CPU 性能的影响主要因为 CPU 的数据交换顺序和 CPU cache间的带宽决定

CPU的处理能力要远比内存强,主内存执行一次内存读、写操作的时间可能足够处理器执行上百条的指令。为了弥补处理器与内存处理能力之间的鸿沟,在内存和处理器之间引入了高速缓存(Cache)。高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每个处理器都有其高速缓存

CPU cache的意义:

1.时间局部性
2.空间局部性

  1. 某个数据被访问,那么在不就的将来它很可能再被访问
  2. 某个数据被访问,那么与它相邻的数据很快可能也被访问

但是这里就会出现一个 内存可见性的 问题了

比如 主内存中有一个 int i = 0, 那么这里两个 cache ,一个线程在 cache中 给 i 的值 +100, 而由于 cache中保存的 只是 i的副本,其实并没有写回主内存,假设这个线程是在 左边的那个 cache 操作,而 又一个线程去右边的 那个 cache 去读 这个 i, 他只能读到 i 的值 为 0
为了解决这个问题 intel 和 amd推出了一种协议
缓存一致性协议(MESI)
下面是缓存锁
在这里插入图片描述
现在 Intel 的 i7处理器 和 AMD 的处理器 都是在这种协议上做了相关的扩充,已经不是用这种最原始的方法。

在这里插入图片描述

在这里插入图片描述

简单来说 就是在数据上打个标记

前端总线(也叫CPU总线)是所有CPU与芯片组连接的主干道,负责CPU与外界所有部件的通信,包括高速缓存、内存、北桥,其控制总线向各个部件发送控制信号、通过地址总线发送地址信号指定其要访问的部件、通过数据总线双向传输。在CPU1要做 i++操作的时候,其在总线上发出一个LOCK#信号,其他处理器就不能操作缓存了该共享变量内存地址的缓存,也就是阻塞了其他CPU,使该处理器可以独享此共享内存。

总线锁定把CPU和内存的通信给锁住了,使得在锁定期间,其他处理器不能操作其他内存地址的数据,从而开销较大,所以后来的CPU都提供了缓存一致性机制,Intel的奔腾486之后就提供了这种优化。

总线锁:就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。

缓存锁:所谓“缓存锁定”是指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行数据时,会使缓存行无效。

下面是java内存模型的同步规则

在这里插入图片描述并发的风险和优势。
在这里插入图片描述
总结:
关于CPU的多级缓存,主要有缓存一致性和乱序执行优化。
java 内存模型:

  1. JMM规定
  2. 抽象结构
  3. 同步的8种操作

转载地址:http://oauzi.baihongyu.com/

你可能感兴趣的文章
Subsequence POJ - 3061 ( 尺取法 )
查看>>
常见HTTP状态码大全
查看>>
Python很简单?学会魔术方法才算入门!
查看>>
大数据揭秘:低学历成功逆袭概率多少?结果令人震惊!
查看>>
这16个数据可视化案例,惊艳了全球数据行业
查看>>
大数据死亡率报告揭秘:SUV与轿车到底谁更危险?
查看>>
2017年网络流行语TOP20 , 没用过算我输!
查看>>
GitHub最著名的20个Python机器学习项目!
查看>>
看完这13张图,不得不佩服还是外国人会玩人工智能
查看>>
大数据产业日趋成熟 市场规模将达千亿
查看>>
资源 | Github项目:斯坦福大学CS-224n课程中深度NLP模型的PyTorch实现
查看>>
一千个不用 Null 的理由
查看>>
2018年大数据趋势 :人工智能... 数据分析将包含可视化模型...
查看>>
他用python做了个小游戏,然后...
查看>>
用 Python分析胡歌的《猎场》到底值不值得看?
查看>>
程序员的心理活动,扎心了!
查看>>
从零开始用Python构造决策树(附公式、代码)
查看>>
精华 | 12个关键词告诉你告诉你什么是机器学习(基础篇)
查看>>
15个优秀的开源项目,让你轻松应对Android开发
查看>>
正态分布为什么常见?
查看>>