走進並行
同步(Synchronous)和異步(Asynchronous):
- 同步與異步均用於形容一次方法調用
- 同步方法調用一旦開始,調用者需等到方法調用結束,纔可執行後續操作
- 異步方法調用可以看作是消息通知,一旦開始,方法調用立即返回,調用者可繼續執行後續操作
並行(Parallelism)和併發(Concurrency);
- 並行是真正意義上的同時執行
- 併發是任務交替執行,而多個任務之間可能還是串行的
- 如果一個系統中只有一個CPU且是單核的,則多線程或者多進程都是併發的,而非真正意義上的並行
- 並行只可能在不只有一個CUP(如多核CPU)的系統中才會出現
臨界區
- 臨界區指的是一種公共資源或者說共享數據,有多個線程可以訪問。但,當一個線程訪問臨界區時,其它線程必須等待,即每次只有一個線程能訪問臨界區。
阻塞(Blocking)和非阻塞(Non-Blocking):
- 通常用來形成多線程間的相互影響
- 例如,當一個線程訪問了臨界區資源,其它需要此資源的線程就必須等待。等待就意味着線程被掛起,這種情況就是阻塞
- 非阻塞強調的是沒有一個線程會影響其它線程執行。
死鎖(DeadLock)、飢餓(Starvation)和活鎖(LiveLock):
-死鎖:多個線程間互相需要對方的資源而產生死循環導致所有線程都在相互等待、永遠無法獲得線程執行所需的資源
-飢餓: 一個或多個線程由於種種原因而一直無法獲得線程執行所需的資源(例如,某個線程一直佔用資源不放;某個線程優先級較低,而一直無法獲得資源)
-活鎖:線程間主動將資源釋放給對方,導致資源在線程間跳動,而沒有一個線程獲取到線程執行所需的全部資源
併發級別:
- 阻塞(Blocking)
- 無飢餓(Starvation-Free)
- 無障礙(Obstruction-Free)
- 無鎖(Lock-Free)
- 無等待(Wait-Free)
兩個定律:
F:串行比例
n:處理器個數
加速比:系統優化前耗時/系統優化後耗時
-
Amdahl定律:
– 當系統串行比例一定時,強調單純地增加處理器數量,對系統性能的提升存在上限。 -
Gustafson定律
$$ 加速比=n-F(n-1)
–更加關注的是當串行比例足夠小,系統性能就會隨着CPU的數量現行上升。