計算機兩大定律
摩爾定律:CPU晶體管數(shù)量的變化趨勢
Amdahl定律:并行計算與串行計算的比例來提高效率
計算機體系結(jié)構(gòu)最基本特點是一根總線串聯(lián)硬件琼梆,每個硬件都由控制器和CPU相連介袜。
總線只是把硬件串聯(lián)起來彰檬,但是不能保證這些硬件能協(xié)調(diào)工作射沟。比如CPU的速度比存取內(nèi)存碰煌,硬件IO和網(wǎng)絡(luò)IO快得多拍顷。
這就需要緩存把各個硬件協(xié)調(diào)起來。緩存的出現(xiàn)帶來了緩存一致性問題督弓。
Java內(nèi)存模式JMM
每個線程都有自己的工作內(nèi)存营曼,里面存放主內(nèi)存數(shù)據(jù)的副本,線程只是處理工作內(nèi)存中的副本愚隧,然后同步到主內(nèi)存中去蒂阱。
并發(fā)的三種特性
1)原子性:基本數(shù)據(jù)類型的訪問是需要原子性的,更大范圍的原子性則需要鎖狂塘。
2)可見性:某線程修改某變量录煤,其他變量能及時看到
synchronized, volatile, final
3)有序性:synchronized, volatile(禁止指令重排序優(yōu)化)
調(diào)度:OS為線程分配CPU的使用權(quán)
1)協(xié)同式調(diào)度:線程執(zhí)行時間由線程自己決定
2)搶占式調(diào)度:OS分配線程執(zhí)行時間
線程安全
1)互斥同步:鎖(及其條件變量)
鎖的優(yōu)化:自旋鎖(避免線程上下文切換荞胡,但自旋時間不好控制)妈踊,鎖的粒度,輕量級鎖泪漂,
偏向鎖
2)無阻塞同步 CAS:依靠硬件指令
缺點是ABA問題廊营,解決方案是AtomicStampedReference類控制變量值的版本。
3)無鎖編程:ThreadLocal