缓存一致性协议和内存屏障

现代 CPU 一般都是有多级缓存的,越靠近 CPU 的缓存越快也越小。CPU 缓存层数并不固定,通常是三层,因此这里以三层缓存的典型 hierarchy 来进行叙述。

CPU 的三层缓存我们称之为 L1,L2 和 L3 cache,也被称为一/二/三级缓存。其中:

  • L1 和 L2 cache 为每个核特有,L1 缓存是最小最快的缓存。
  • L3 为单个插槽上的所有 CPU 核心共享。
  • 主存保存这程序运行的所有数据,相比较 L1/L2/L3 而言,更大更慢,由所有插槽上的所有 CPU 核心共享。
阅读更多

简述 memory reordering

什么是 memory reordering

在阐述 memory reordering 之前,首先需要声明的一点是:

memory reordering 本身和多线程没有必然联系,无论保持何种 memory order ,均只是对程序的底层执行进行优化(优化包括编译器和 CPU 两个环节)来提高运行速度,而绝不会改变单线程程序执行的最终结果。只是在实际实践的过程中往往会使用 memory reordering 的特性来保证多线程操作时的线程安全而已。所谓 memory reordering,本质上就是编译器和 CPU 对单线程中指令执行顺序进行的优化。

memory reordering 涉及到各语言编译器的具体实现以及硬件平台的设计。memory reordering 本质上其实可以简单分为三种:

  • relaxed ordering:最弱的内存模型。
  • acquire-release ordering:遵循 acquire and release semantics 的内存模型。
  • sequential consistent ordering:连续一致性模型,没有任何 memory reordering 的可能,下文简称 SC。

三种模型从上往下,依次加强。硬件平台和各语言实现中按内存模型的强弱可以划分如下:

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×