两个线程逻辑上完全没有共享数据,不存在竞态条件,不需要互相等待。但是硬件层面,却在不停让缓存行在各个核心之间来回同步、失效、重新加载。大量 CPU 时钟周期浪费在缓存一致性同步,真正的业务计算占比被挤压。
通俗类比:一张大桌子(对应一条缓存行)可以放下多本书(多个变量)。两个人(两个 CPU 核心)各自只读、修改属于自己的那一本书。但是两本书都摆在同一张桌子。只要有一个人挪动自己的书本,整张桌子就要被搬走重建,另一个人就无法阅读自己的书。两个人互不干涉,却被桌子的粒度拖累,来回搬运消耗大量时间。
伪共享典型特征