Java高並發-概念
阿新 • • 發佈:2018-04-05
3.1 常用 摩爾定律 請求 adl ava 異步 數據 操作
一、為什麽需要並行
業務要求
- http處理多個客戶端請求
- java虛擬機啟動多個線程
- 進程開銷比線程大的多
性能
- 多線程在多核系統比單線程要好的多
摩爾定律失效
二、幾個重要概念
2.1 同步和異步
synchronous,asynchronous
2.2 並發和並行
concurrency,parallelism
2.3 臨界區
臨界區用來表示一種公共資源或者說是共享數據,可以被多個線程使用。但是每一次,只能有一個線程使用它,一旦臨界區資源被占用,其他線程要想使用這個資源,就必須等待。
2.4 阻塞和非阻塞
blocking,non-blocking
阻塞和非阻塞通常用來形容多線程音的相互影響。比如一個線程占用了臨界區資源,那麽其它所有需要這個資源的線程就必須在這個臨界區中進行等待,等待會導致線程掛起。這種情況就是阻塞。此時,如果占用資源的線程一直不願意釋放資源,那麽其它所有阻塞在這個臨界區上的線程都不能工作。
非阻塞允許多個線程同時進入臨界區。
2.5 死鎖、饑餓和活鎖
deadlock,starvation,livelock
死鎖:搶占資源而不釋放
饑餓是指某一個或者多個線程因為種種原因無法獲得所需要的資源,導致一直無法執行。比如某線程因優先級低獲取不到資源。
活鎖:電梯遇人
2.6 並行的級別
阻塞:當一個線程進入臨界區後,其他線程必須等待
無障礙(Obstruction-Fee):
- 無障礙是一種最弱的非阻塞高度
- 自由出入臨界區
- 無競爭時,有限步內完成操作
- 有競爭時,回滾數據
無鎖(Lock-Fee):
- 是無障礙的
- 保證有一個線程可以勝出
// 典型的無鎖代碼
while(!atomicVar.compareAndSet (localVar, localVar+1)) {
localVar = atomicVar.get();
}
無等待(Wait-Free):
- 無鎖的
- 要求所有的線程都必須在有限步內完成
- 無饑餓的
三、2個重要的定理
3.1 Amdahl定律(阿姆達定律)
3.2 Gustafson定律(古斯塔夫森)
Java高並發-概念