1 缓存行

在计算机系统中,内存是以缓存行为单位存储的,一个缓存行存储字节的数量为2的倍数,在不同的机器上,缓存行大小为32字节到256字节不等,通常来说为64字节。

2 伪共享

如果多个线程操作不同的成员变量,但是这些变量存储在同一个缓存行,如果有处理器更新了缓存行的数据并刷新到主存之后,根据缓存一致性原则,其他处理器将失效该缓存行导致缓存未命中,需要重新去内存中读取最新数据,这就是伪共享问题。

cache.png

从上图看到,线程1在CPU核心1上读写变量X,同时线程2在CPU核心2上读写变量Y,不幸的是变量X和变量Y在同一个缓存行上,每一个线程为了对缓存行进行读写,都要竞争并获得缓存行的读写权限,如果线程2在CPU核心2上获得了对缓存行进行读写的权限,那么线程1必须刷新它的缓存后才能在核心1上获得读写权限,这导致这个缓存行在不同的线程间多次通过L3缓存来交换最新的拷贝数据,这极大的影响了多核心CPU的性能。如果这些CPU核心在不同的插槽上,性能会变得更糟。