Java 并發(fā)和高并發(fā)
https://coding.imooc.com/learn/list/195.html
Java 多線程模塊:
并發(fā)的基本概念:
同時擁有一個或者多個線程,如果程序在單核處理器上運行,多個線程將交替的換入或者換出內(nèi)存牡肉。
一個線程對應(yīng)者Cpu的一個內(nèi)核。現(xiàn)在系統(tǒng)都是多核處理器鸭丛,同時支持多個并發(fā)一起執(zhí)行程序。
CPU 多級緩存
因為Cpu運算速度飛速提高儡嘶,而內(nèi)存的讀取速度有限宋雏。導(dǎo)致独令,Cpu一直在等待內(nèi)存讀取存儲區(qū)的數(shù)據(jù),為了加快計算效率好芭,
使用內(nèi)存中出現(xiàn)緩存進行燃箭,提高讀取速度。
cpu 緩存 主存
cpu -> cache -> memory
Cpu多級緩存的意義舍败?
1)時間局部性:如果某一個數(shù)據(jù)被訪問招狸,那么不久的將來,它很可能被再次訪問邻薯。
2)空間局部性:如果某個數(shù)據(jù)被訪問裙戏,他們與他相鄰的數(shù)據(jù)很快也有可能被訪問
Cpu對Cache的狀態(tài)?
用于保證多個Cpu cache 之間緩存共享數(shù)據(jù)的一致性
M :Modifier 修改
E : Exclusive 獨享厕诡,專用的
S : Share 共享
I :Invalid 無效的
local read 讀取本地緩存
local write 寫入本地緩存
remote read 讀取主存中的數(shù)據(jù)
remote write 把數(shù)據(jù)寫入主存
image.png
Java 內(nèi)存模型(java Memory model ,jmm)
Heap 堆 : 運行時動態(tài)分配內(nèi)存 存取速度相對慢
Stack 棧 :存取速度塊累榜,僅此于計算機里的寄存器, 共享灵嫌。 1.存儲基本對象類型 2.存儲空間小 3壹罚、生成期數(shù)據(jù),不是太靈活
當(dāng)多個線程寿羞,訪問同一個變量猖凛,他們擁有的是該變量的私有拷貝。
CPU -> cpu 寄存器 -> cpu緩存(讀寫速度非常塊的存儲區(qū)域) -> 內(nèi)存
Java內(nèi)存模型 同步八種操作
Lock 鎖定 :用于主內(nèi)存的變量绪穆,把一個變量標(biāo)識為一條線程獨占狀態(tài)辨泳。
Unlock 解鎖 :用于主內(nèi)存的變量虱岂,把一個處于鎖定狀態(tài)的變量釋放出來,釋放后的變量可以被其他線程鎖定菠红。
Read 讀鹊卺: 作用于主內(nèi)存的變量,把一個變量值從主內(nèi)存?zhèn)鬏數(shù)骄€程的工作內(nèi)存中去试溯,以便以后load動作使用蔑滓。
Load 載入: 工作于內(nèi)存的變量,把他read操作從主內(nèi)存的變量值放入工作內(nèi)存的變量副本中去耍共。
Use 使用: 作用于工作內(nèi)存的變量烫饼,把工作內(nèi)存中的一個變量值傳給執(zhí)行引擎猎塞。
Assign 賦值: 作用于工作內(nèi)存的變量试读,他把一個從執(zhí)行引擎接收到的值賦值給工作內(nèi)存的變量。
Store 存儲: 作用于工作內(nèi)存的變量荠耽,把工作內(nèi)存中一個變量的值傳送噠到主存中钩骇,以便隨后的write的操作。
write 寫入: 作用于主存的變量铝量,他把store操作從工作內(nèi)存中一個變量的值傳送到主內(nèi)存的變量中去倘屹。
image.png
image.png