并发编程与高并发解决方案——CPU多级缓存和缓存一致性

cache的作用

随着现代半导体工艺的发展,CPU的频率越来远快,相对内存快了一个数量级,对于访存的操作CPU就需要等待主存,这样会导致资源的白白浪费。所以cache的出现是为了解决CPU与内存速度不匹配的问题,(结构:cpu->cache->memory).

cache 的工作原理

是基于“局部性”原理,它包含以下两个方面:

  • 时间局部性:如果某个数据被访问,那么不久将来它很可能再次被访问。
  • 空间局部性:如果某个数据被访问,那么与它相邻的数据也可能被访问。
    现在的多核CPU的缓存一般都到了
CPU多级缓存-缓存一致性(MESI)

MESI协议的作用:用于保证多个CPU Cache之间缓存共享数据的一致

MESI 是指4中状态的首字母。每个Cache line有4个状态,可用2个bit表示,它们分别是:

注: 缓存行(Cache line):缓存存储数据的单元。

各个状态的描述
状态描述监听任务
M 修改 (Modified)该Cache line有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中缓存行必须时刻监听所有试图读该缓存行相对就主存的操作,这种操作必须在缓存将该缓存行写回主存并将状态变成S(共享)状态之前被延迟执行
E 独享、互斥 (Exclusive)该Cache line有效,数据和内存中的数据一致,数据只存在于本Cache中缓存行也必须监听其它缓存读主存中该缓存行的操作,一旦有这种操作,该缓存行需要变成S(共享)状态
S 共享 (Shared)该Cache line有效,数据和内存中的数据一致,数据存在于很多Cache中缓存行也必须监听其它缓存使该缓存行无效或者独享该缓存行的请求,并将该缓存行变成无效(Invalid)
I 无效 (Invalid)该Cache line无效
触发事件:
触发事件描述
本地读取(Local read)本地cache读取本地cache数据
本地写入(Local write)本地cache写入本地cache数据
远端读取(Remote read)其它cache读取本地cache数据
远端写入(Remote write)其它cache写入本地cache数据
CPU多级缓存-乱序执行优化

处理器为提高运算速度而做出违背代码原有顺序的优化。

如下对代码的执行的顺序进行了修改,但是最终的结果不会影响

Java内存模型(Java Memory Model,JMM)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFGzDnab-1571039461463)(C:\Users\dell-pc\AppData\Roaming\Typora\typora-user-images\1571026659760.png)]

odel,JMM)

[外链图片转存中…(img-EFGzDnab-1571039461463)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值