每個執行緒在執行的過程都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行**。這個問題只出現在使用cpython直譯器的時候,同時也是只出現在使用多執行緒的時候;
在使用執行緒的時候會避免多執行緒共享全域性變數帶來全域性變數混亂的問題,我們引入了互斥鎖(使用互斥鎖解決**中的資源競爭問題時,當乙個執行緒執行時,會將全域性共享的資源上鎖,當執行緒執行完成後,將鎖解開,釋放資源,其他執行緒才能夠使用。),gil的作用與互斥鎖的作用相似,是為了解決直譯器中多個執行緒資源競爭的問題;
由於gil的功能類似於互斥鎖,所以gil導致的問題是「偽多執行緒」,不是真正的併發,在python中同一時刻有且只有乙個執行緒會執行。
由於gil的存在,同一時刻只能有乙個執行緒執行,在程式進行io操作時,cpu實際並沒有做任何工作,程式執行效率非常低。為了提高cpu的使用率,python解釋在程式執行io等待時,會釋放gil鎖,讓其它執行緒執行,提高python程式的執行效率。
Python 學習筆記 GIL
python 全域性翻譯鎖 gil global interpreter lock 為了實現在多核環境下的執行時資料的一致性,python採用加鎖的思想來實現這種同步和一致性,這把鎖就是gil。這造成了一定量的效能損失,使用鎖的原因是因為python直譯器內部是執行緒不安全的。另外一點,首先需要明確...
Python學習筆記12
分支和迴圈 1.判斷乙個條件,如果這個條件成立,就執行其包含的某條語句或者某個 塊 if condition statement s 2.判斷乙個條件,如果這個條件成立就執行其飽含的某條語句或者某個 塊,如果不成立則執行另外的某條語句或者某個 塊 if condition statement s e...
Python效能分析與優化,GIL 學習筆記
cpython直譯器記憶體管理並不是是執行緒安全的 保護多執行緒情況下對python物件的訪問 cpython使用簡單的鎖機制避免了多個執行緒同時執行位元組碼同一時間只有乙個執行緒執行位元組碼 cpu密集程式 大量時間花在計算 難以利用多核優勢 io期間會釋放gil,對io密集程式 大量時間花在網路...