加载中...

MESI 是多核处理器中维护缓存一致性(Cache Coherence)的经典协议,名称取自缓存行的四种状态:Modified(已修改,数据为脏且唯一)、Exclusive(独占,干净且唯一)、Shared(共享,多核持有相同副本)、Invalid(失效)。它保证同一内存位置在各核心缓存中的视图一致。
各核缓存通过总线嗅探(Snooping)或目录机制观察彼此的内存操作:某核要写入处于 Shared 状态的缓存行时,须先广播失效消息使其他副本变为 Invalid,再转入 Modified;其他核随后读取该行时,脏数据被回写或直接转发。为掩盖失效等待延迟,实际 CPU 还引入了 Store Buffer 与 Invalidate Queue,这也是内存重排序与内存屏障存在的硬件根源。真实处理器多用其变体,如 Intel 的 MESIF、AMD 的 MOESI。
最著名的性能陷阱是伪共享(False Sharing):两个核频繁写同一缓存行内的不同变量,导致该行在核间反复失效弹跳,性能可能下降数倍。高性能代码常按缓存行(通常 64 字节)对齐填充热点变量,Java 的 @Contended 注解即源于此。

登录 后参与讨论
暂无讨论,来发表第一条评论吧