CPU 缓存模型 学习笔记

此文学习笔记,原文连接

CPU 缓存模型

为什么要弄一个 CPU 高速缓存呢?

  • 系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。
  • CPU 缓存则是为了解决 CPU 处理速度内存处理速度不对等的问题.

总结:
内存缓存的是硬盘数据,用于解决硬盘访问速度过慢的问题。
CPU Cache 缓存的是内存数据,用于解决 CPU 处理速度和内存不匹配的问题。
CPU 缓存模型 学习笔记_第1张图片

CPU Cache 的工作方式:

复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。

但是,这样存在 内存缓存不一致性的问题 !

JMM(Java 内存模型)

当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致
CPU 缓存模型 学习笔记_第2张图片
要解决这个问题,就需要把变量声明为 volatile ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取

所以,volatile 关键字 除了防止 JVM 的指令重排 ,还有一个重要的作用就是保证变量的可见性。

你可能感兴趣的:(缓存,java)