Java并发编程------CPU的多级缓存

        最近在学习Java并发编程,工作了几年一直CRUD,平常也基本上遇见不大特别大的并发的场景和模块,并发编程这块一直比较薄弱,所以学习总结一下。

         至于什么是CPU的一级缓存和多级缓存,相信只要度娘一搜就是一大把,这里就不一一展开说明了,楼主主要是列举几个例子来理解一些这比较模糊的 CPU的MESI相关协议内

首先得知道CPU的MESI是什么鬼,网上有很多图各种圈圈画着的,可以看看,觉得最重要的还是理解

M:modified被修改。该缓存行只被缓存在CPU的缓存中,并且是被修改过的,因此它与主存中的数据是不一致的,该缓存行的内存需要在某个时间点写回主存,这个时间点是允许其他CPU读取主内相应的内存之前。当这里的值被写回主存之后,该缓存行会变成E状态。

E:exclusive独享。该缓存行只被缓存在该CPU缓存中,是未被修改过的,与主存中数据一致的。这个状态可以在任何时刻,当有其他CPU读取该缓存行时,变成S状态。当CPU修改该缓存行内容时,该状态可以变成M状态。

S:shared共享。该缓存行可能被多个CPU缓存,并且各个缓存的数据和主存的数据一致,当有一个CPU修改该缓存行的时候,其他CPU从该缓存行是可以被作废的,变成I状态。

I:invalid无效的。这个缓存是无效的,可能是其他CPU修改了该缓存。

当然最常见四种操作:

Local read:读本地缓存(CPU的高速缓存cache)中的数据

Local write:将数据写到本地的缓存(CPU的高速缓存cache)中

Remote read:将内存(主存)的数据读取过来

Remote write:将数据写回到主存中

接下来楼主列举一些常见的例子来主要讲述一下MESI这几种状态的变化

一般来说CPU都是多核处理器,不会出现单核情况,但是为了方便理解还是列举一个单核的图

此处例子转载  https://www.cnblogs.com/yanlong300/p/8986041.html

Java并发编程------CPU的多级缓存_第1张图片

Java并发编程------CPU的多级缓存_第2张图片Java并发编程------CPU的多级缓存_第3张图片

Java并发编程------CPU的多级缓存_第4张图片

你可能感兴趣的:(Java并发编程)