一、全域性直譯器鎖(gil)
1、什麼是全域性直譯器鎖
在同乙個程序中只要有乙個執行緒獲取了全域性直譯器(cpu)的使用許可權,那麼其他的執行緒就必須等待該執行緒的全域性直譯器(cpu)使 用權消失後才能使用全域性直譯器(cpu),即時多個執行緒直接不會相互影響在同乙個程序下也只有乙個執行緒使用cpu,這樣的機制稱為全域性 直譯器鎖(gil)。
2、全域性直譯器鎖的好處
1、避免了大量的加鎖解鎖的好處
2、使資料更加安全,解決多執行緒間的資料完整性和狀態同步
3、全域性直譯器的缺點
多核處理器退化成單核處理器,只能併發不能並行。
4、如圖所示:
同一時刻的某個程序下的某個執行緒只能被乙個cpu所處理,所以在gil鎖下的執行緒只能被併發,不能被並行。
5、例項:
二、同步鎖
1、什麼是同步鎖?
同一時刻的乙個程序下的乙個執行緒只能使用乙個cpu,要確保這個執行緒下的程式在一段時間內被cpu執,那麼就要用到同步鎖。
2、為什麼用同步鎖?
因為有可能當乙個執行緒在使用cpu時,該執行緒下的程式可能會遇到io操作,那麼cpu就會切到別的執行緒上去,這樣就有可能會影響到該程 序結果的完整性。
3、怎麼使用同步鎖?
只需要在對公共資料的操作前後加上上鎖和釋放鎖的操作即可。
4、例項:
· 5、擴充套件知識
1、gil的作用:多執行緒情況下必須存在資源的競爭,gil是為了保證在直譯器級別的執行緒唯一使用共享資源(cpu)。
2、同步鎖的作用:為了保證直譯器級別下的自己編寫的程式唯一使用共享資源產生了同步鎖。
三、遞迴鎖和死鎖
1、什麼是死鎖?
指兩個或兩個以上的執行緒或程序在執行程式的過程中,因爭奪資源而相互等待的乙個現象,如圖所示。
2、什麼是遞迴鎖?
在python中為了支援同乙個執行緒中多次請求同一資源,python提供了可重入鎖。這個rlock內部維護著乙個lock和乙個counter
變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到乙個執行緒所有的acquire都被release,其他的執行緒才能獲
得資源。
四、訊號量(semaphore)
1、什麼是訊號量?
同程序的一樣,semaphore管理乙個內建的計數器,每當呼叫acquire()時內建函式-1,每當呼叫release()時內建函式+1。
計數器不能為0,當計數器為0時acquire()將阻塞執行緒,直到其他執行緒呼叫release()。
2、如圖所示:
理解Python中的鎖
一 全域性直譯器鎖 global interpreter lock,gil 1.什麼是全域性直譯器鎖 2.全域性直譯器鎖的好處 3.全域性直譯器鎖的缺點 import time import threading defsub global num num 1 time.sleep 1 num 100...
python鎖機制 python的鎖機制
鎖 lock lock 指令鎖 是可用的最低階的同步指令。lock處於鎖定狀態時,不被特定的執行緒擁有。lock包含兩種狀態 鎖定和非鎖定,以及兩個基本的方法。可以認為lock有乙個鎖定池,當執行緒請求鎖定時,將執行緒至於池中,直到獲得鎖定後出池。池中的執行緒處於狀態圖中的同步阻塞狀態。構造方法 l...
python鎖機制 python 鎖機制
當有兩個或跟多個執行緒或程序需要操作乙個變數或程序時,會出現意想不到的結果,這是因為執行緒或程序時迸發進行的,對同意變數或檔案操作時,會出現同時對其操作,從到導致邏輯錯誤。bin usr env python coding utf 8 import multiprocessing import ti...