GIL
GIL全稱Global Interpreter Lock,是一把全局排他鎖,即全局解釋器鎖。每個線程在執行的過程都需要先擷取GIL,保證同一時刻隻有一個線程可以執行代碼。
Python中有關GIL的特性:
- 多程序才能真的發揮多并發,而多線程是假并發,若想實作并發推薦使用程序;
- 多線程同時僅有一個在執行,是假并發/假多任務,實際是單任務,這是python解釋器的本身原因。
- GIL遺留原因:官網預設Python使用C語言的cpython解釋器,而C語言解釋器線程執行時先選擇性上鎖,GIL解釋器鎖會保證線程在同一時刻隻有一個在做,即GIL是Python利用C語言開發時遺留的曆史問題
- 全局解釋性鎖:多線程執行前先搶鎖,保證同一時刻僅有一個線程在執行
- 多線程還是比單線程快 ,多線程在一個線程執行io程式操作過程中會自動進行另一個線程
GIL的缺點: 不适合計算密集型程式
- 計算密集型程式:沒有等待時間的程式-程序
- io密集型:讀寫模式或有等待時間的程式-線程、協程
GIL的解決方法:
- 換非C語言版本python解釋器 例如: jython HXH.py
- python中部分執行代碼用C語言代碼代替
- 用多程序