JUC并发编程-2.CPU多级缓存与JMM

1.CPU多级缓存

1.1 为什么需要CPU cache

CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu >> cache >> memory).

1.2 CPU cache有什么意义

1.时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问
2.空间局部性:如果某个数据被访问,那么与它响铃的数据很快也可能被访问

1.3 CPU缓存一致性协议 MESI

  • M: 被修改(Modified)

该缓存行只被缓存在该CPU的缓存中,并且是被修改过的(dirty),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU读取请主存中相应内存之前)写回(write back)主存。
.
当被写回主存之后,该缓存行的状态会变成独享(exclusive)状态。

  • E: 独享的(Exclusive)

该缓存行只被缓存在该CPU的缓存中,它是未被修改过的(clean),与主存中数据一致。该状态可以在任何时刻当有其它CPU读取该内存时变成共享状态(shared)。
.
同样地,当CPU修改该缓存行中内容时,该状态可以变成Modified状态。

  • S:共享的(Shared)

该状态意味着该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存数据一致(clean),当有一个CPU修改该缓存行中,
.
其它CPU中该缓存行可以被作废(变成无效状态(Invalid))。

  • I: 无效的(Invalid)

该缓存是无效的(可能有其它CPU修改了该缓存行)。

MESI状态转换图.png
MESI转移表.png

2.JMM

CPU多级缓存1.jpg
CPU与JMM1.jpg
CPU与JMM2.jpg
JMM.jpg
JMM同步操作.jpg
JMM与线程.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容