缓存一致性协议-mesi
warning:
这篇文章距离上次修改已过787天,其中的内容可能已经有所变动。
背景
现代CPU几乎都是多核,每个核心也有自己独立的缓存(L1,L2,L3),当多个核心同时对一个数据(变量)更新时,假设核心1在核心2还未将更新的数据刷回内存之前读取了数据,并进行操作就会造成程序执行的结果不符合逾期。这对于我们程序来说,是不正确的。
字母解释
- M:(modify)修改 -- 该缓存行有效,数据被修改了,和内存中的数据不一致,数据只存在于本缓存行中
- E:(exclusive)独享、互斥 -- 该缓存行有效,数据和内存中的数据一致,数据只存在于本缓存行中
- S:(shared)共享 -- 该缓存行有效,数据和内存中的数据一致,数据同时存在于其他缓存中
- I:(invalid)无效 -- 该缓存行数据无效
优势
对于总线锁,总线锁是对整个内存进行加锁,在一个核心对一个数据进行修改的过程中,其他的核心也无法修改内存中的其他数据,这样会导致CPU处理性能严重下降。
什么情况下不可用
- CPU不支持缓存一致性协议
- 变量超过一个缓存行的大小,缓存一致性协议是针对单个缓存进行加锁。此时,缓存一致性协议无法再对该变量进行加锁,只能改用总线加锁方式。
传世网站三无版本,如何选择:https://501h.com/yuanshi/11031.html