最近在学习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缓存一致性问题及MESI协议的工作原理,通过实例解析MESI状态变化,帮助读者理解并发编程的基础。
441

被折叠的 条评论
为什么被折叠?



