伪共享问题及解决方法

引言:
缓存伪共享
共享对象存在同一个缓存中,由于MESI协议,一个对象中一些不需要改变的属性因为其他改变的属性,导致整个对象的缓存进入到M被修改状态。

MESI缓存一致性协议:https://blog.csdn.net/huangyueranbbc/article/details/84554271

在这里插入图片描述
目前的CPU是按照64K的缓存行(Cache Line)进行读取,如果读取的数据在同一个CacheLine,就存在缓存伪共享的问题。

对象被放入一个CacheLine中,根据MSEI协议,其中一个属性改变,其他所有没有改变的属性也变得不可共享。

填充Cache Line缓存块
通过填充对象,将对象中常被改变的属性和不常改变的属性分开到不通缓存Cache Line中。避免缓存的伪共享。

转载自:https://www.520mwx.com/view/33959
解决方案详见:https://blog.csdn.net/u012233832/article/details/79619300