課程基礎(chǔ)
需要有java使用經(jīng)驗
為什么需要并行
- 業(yè)務要求
- 性能
幾個重要的概念
同步(synchonous)和異步(asynchonous)
并發(fā)(Concurrency)和并行(Parallelism)
臨界區(qū)
臨界區(qū)用來表示一種公共資源或者說是共享數(shù)據(jù),可以被多個線程使用蜜徽。但是每一次庄敛,只能有一個線程使用它晚胡,一旦臨界區(qū)資源被占用瓶佳,其他線程要想使用這個資源逢艘,就必須等待丈牢。
阻塞(Blocking)和非阻塞(Non-Blocking)
- 阻塞和非阻塞通常用來形容多線程間的相互影響祭钉。比如一個線程占用了臨界區(qū)資源,那么其它所有需要這個資源的線程就必須在這個臨界區(qū)中進行等待己沛,等待會導致線程掛起慌核。這種情況就是阻塞。此時申尼,如果占用資源的線程一直不愿意釋放資源垮卓,那么其它所有阻塞在這個臨界區(qū)上的線程都不能工作。
- 非阻塞允許多個線程同時進入臨界區(qū)
鎖(Deadlock)师幕、饑餓(Starvation)和活鎖(Livelock)
并行的級別
阻塞
當一個線程進入臨界區(qū)后粟按,其他線程必須等待
非阻塞
無障礙
- 無障礙是一種最弱的非阻塞調(diào)度
- 自由出入臨界區(qū)
- 無競爭時,有限步內(nèi)完成操作
- 有競爭時霹粥,回滾數(shù)據(jù)
無鎖
- 是無障礙的
- 保證有一個線程可以勝出
while (!atomicVar.compareAndSet(localVar, localVar+1))
{
localVar = atomicVar.get();
}
無等待
- 無鎖的
- 要求所有的線程都必須在有限步內(nèi)完成
- 無饑餓的
2個重要的定理
Amdahl定律(阿姆達爾定律)
- 定義了串行系統(tǒng)并行化后的加速比的計算公式和理論上限
-
加速比定義:加速比=優(yōu)化前系統(tǒng)耗時/優(yōu)化后系統(tǒng)耗時
加速比=優(yōu)化前系統(tǒng)耗時/優(yōu)化后系統(tǒng)耗時=500/400=1.25
增加CPU處理器的數(shù)量并不一定能起到有效的作用,提高系統(tǒng)內(nèi)可并行化的模塊比重灭将,合理增加并行處理器數(shù)量,才能以最小的投入后控,得到最大的加速比
Gustafson定律(古斯塔夫森)
-
說明處理器個數(shù)庙曙,串行比例和加速比之間的關(guān)系
只要有足夠的并行化,那么加速比和CPU個數(shù)成正比