JavaJava 程序员

深入理解JMM-CPU多核硬件架构剖析及Java内存模型

2022-04-28  本文已影响0人  程序花生

本节带着大家了解CPU多核硬件架构以及Java内存模型

CPU多核硬件架构剖析

CPU每次从主内存读取数据比较慢,CPU通常涉及多级缓存。CPU读主内存的数据, 按照空间局部性原则加载局部快照到缓存中

L1 L2 属于每个CPU中都是独立的缓存,缓存主内存共享变量的数据作为副本,L3属于多个cpu之间共享的缓存。 每个cpu之间都有独立二级缓存主内存的数据作为副本,而副本与副本之间是完全不可见的

总线仲裁机制

总线锁定

缓存锁定

MESI协议

JMM内存模型

主内存

存放我们共享变量的数据

工作内存

每个CPU对共享变量(主内存)的副本

JMM八大同步规范

  1. read(读取):从主内存读取数据
  2. load(载入):将主内存读取到的数据写入工作内存中
  3. use(使用):从工作内存读取数据来计算
  4. assign(赋值):将计算好的值重新赋值到工作内存中
  5. store(存储):将工作内存数据写入主内存
  6. write(写入):将store过去的变量值赋值给主内存中的变量
  7. lock(锁定):将主内存变量加锁,标识位线程独占状态
  8. unlock(解锁):将主内存变量解锁,解锁后其他线程可以锁定该变量

并发三大特性

可见性、原子性、有序性

可见性

可见性指的是当一个线程修改了某个共享变量的值,其他线程是否能够马上得知这个修改的值

如何保证可见性

有序性

即程序执行的顺序按照代码的先后顺序执行。JVM 存在指令重排,所以存在有序性问题。多 线程环境下,操作都是无序的,存在指令重排现象和工作内存与主内存同步延迟现象

如何保证有序性

原子性

原子性指的是一个操作是不可中断的,即使是在多线程环境下,一个操作一旦开始就不会 被其他线程影响

如何保证原子性

作者:janyxe
链接:https://juejin.cn/post/7088499375059501069
来源:稀土掘金

上一篇 下一篇

猜你喜欢

热点阅读