Java 并发和高并发
https://coding.imooc.com/learn/list/195.html
Java 多线程模块:
并发的基本概念:
同时拥有一个或者多个线程,如果程序在单核处理器上运行,多个线程将交替的换入或者换出内存。
一个线程对应者Cpu的一个内核。现在系统都是多核处理器,同时支持多个并发一起执行程序。
CPU 多级缓存
因为Cpu运算速度飞速提高,而内存的读取速度有限。导致,Cpu一直在等待内存读取存储区的数据,为了加快计算效率,
使用内存中出现缓存进行,提高读取速度。
cpu 缓存 主存
cpu -> cache -> memory
Cpu多级缓存的意义?
1)时间局部性:如果某一个数据被访问,那么不久的将来,它很可能被再次访问。
2)空间局部性:如果某个数据被访问,他们与他相邻的数据很快也有可能被访问
Cpu对Cache的状态?
用于保证多个Cpu cache 之间缓存共享数据的一致性
M :Modifier 修改
E : Exclusive 独享,专用的
S : Share 共享
I :Invalid 无效的
local read 读取本地缓存
local write 写入本地缓存
remote read 读取主存中的数据
remote write 把数据写入主存
image.png
Java 内存模型(java Memory model ,jmm)
Heap 堆 : 运行时动态分配内存 存取速度相对慢
Stack 栈 :存取速度块,仅此于计算机里的寄存器, 共享。 1.存储基本对象类型 2.存储空间小 3、生成期数据,不是太灵活
当多个线程,访问同一个变量,他们拥有的是该变量的私有拷贝。
CPU -> cpu 寄存器 -> cpu缓存(读写速度非常块的存储区域) -> 内存
Java内存模型 同步八种操作
Lock 锁定 :用于主内存的变量,把一个变量标识为一条线程独占状态。
Unlock 解锁 :用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量可以被其他线程锁定。
Read 读取: 作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中去,以便以后load动作使用。
Load 载入: 工作于内存的变量,把他read操作从主内存的变量值放入工作内存的变量副本中去。
Use 使用: 作用于工作内存的变量,把工作内存中的一个变量值传给执行引擎。
Assign 赋值: 作用于工作内存的变量,他把一个从执行引擎接收到的值赋值给工作内存的变量。
Store 存储: 作用于工作内存的变量,把工作内存中一个变量的值传送哒到主存中,以便随后的write的操作。
write 写入: 作用于主存的变量,他把store操作从工作内存中一个变量的值传送到主内存的变量中去。
image.png
image.png
网友评论