1. 程式人生 > >Java高並發-概念

Java高並發-概念

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高並發-概念