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

本文深入探讨Java并发编程中的关键概念,重点讲解CPU缓存一致性问题及MESI协议的工作原理,通过实例解析MESI状态变化,帮助读者理解并发编程的基础。

        最近在学习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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值