1、 全局解釋器鎖(GIL)
1. 什麼是全局解釋器鎖
在同一個進程中只要有一個線程獲取了全局解釋器(cpu)的使用權限,那麼其餘的線程就必須等待該線程的全局解釋器(cpu)使用權消失後才能使用全局解釋器(cpu),即時多個線程直接不會相互影響在同一個進程下也只有一個線程使用cpu,這樣的機制稱爲全局解釋器鎖(GIL)。html
同一時刻的某個進程下的某個線程只能被一個cpu所處理,因此在GIL鎖下的線程只能被併發,不能被並行。python
2. 全局解釋器鎖的優勢
- 避免了大量的加鎖解鎖的好處
- 使數據更加安全,解決多線程間的數據完整性和狀態同步
3. 全局解釋器鎖的缺點
多核處理器退化成單核處理器,只能併發不能並行。安全
2、同步鎖
1. 什麼是同步
同一時刻的一個進程下的一個線程只能使用一個cpu,要確保這個線程下的程序在一段時間內被cpu執,那麼就要用到同步鎖。多線程
2. 爲何要用同步鎖
由於有可能當一個線程在使用cpu時,該線程下的程序可能會遇到io操做,那麼cpu就會切到別的線程上去,這樣就有可能會影響到該程序結果的完整性。併發
3. 怎麼使用同步鎖
只須要在對公共數據的操做先後加上上鎖和釋放鎖的操做便可。函數
3、遞歸鎖和死鎖
1. 死鎖
指兩個或兩個以上的線程或進程在執行程序的過程當中,因爭奪資源而相互等待的一個現象。ui
2. 遞歸鎖
在Python中爲了支持同一個線程中屢次請求同一資源,Python提供了可重入鎖。這個RLock內部維護着一個Lock和一個counter變量,counter記錄了acquire的次數,從而使得資源能夠被屢次require。直到一個線程全部的acquire都被release,其餘的線程才能得到資源。url
4、信號量(semaphore)
1. 什麼是信號量
同進程的同樣,semaphore管理一個內置的計數器,每當調用acquire()時內置函數-1,每當調用release()時內置函數+1。spa
計數器不能爲0,當計數器爲0時acquire()將阻塞線程,直到其餘線程調用release()。.net
參考文獻: