缓存一致性协议MESI
概述
如图是多核CPU和主存通信的一个大致模型,其中的cache是用来解决cpu和主存速度不匹配的问题,所以现如今cpu主要是和它的cache做数据交互,不会和主存直接交互。
这也出现了缓存不一致的问题,比如cpu1在主存中读取一个数据,并且修改了它的值,但是修改后的值只是放在了自己的缓存中,并没有实时的更新到主存中,这时候cpu2来访问注册中的对应的数据,拿到的是一个未修改后的值,这就导致了程序的错误。
解决方法
1.总线加锁
在总线上加LOCK#,如cpu1从主内存读取数据到自己的高速缓存中,会在总线对这个数据加锁,这样其它cpu没法去读或写这个数据,直到cpu1使用完数据释放锁之后其它cpu才能读取该数据。这是早期cpu实现缓存一致性的解决方案,但是这种方法太耗损性能,把并行执行硬生生变为了并发执行,已经被淘汰了,了解即可。
2.MESI协议
对单个缓存行的数据进行加锁,不会影响到内存中其他数据的读写,锁的范围变小了效率也相应的提高了。
缓存一致性协议MESI最先出现在Python成神之路。
共有 0 条评论