標籤:mic 2.4 3.1 cal 無法獲得 用戶端 原因 syn 執行
一、為什麼需要並行
業務要求
- 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高並發-概念