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

你可能感兴趣的:(JUC并发编程-2.CPU多级缓存与JMM)