Python全局解釋器鎖(GIL)
阿新 • • 發佈:2018-08-09
oba mce put 執行 單線程 pre gil 數據通信 安全 GIL應該是面試的一個常考題,什麽是GIL?
GIL的全程是Global Interpre Lock(全局解釋器鎖)。
不是Python中有GIL,而是CPython中有全局解釋器鎖。(JPython中沒有GIL)
GIL是一個互斥鎖,CPython在執行多線程的時候並不是線安全的,為了程序的安全性考慮了全局解釋器鎖。
每個CPU在同一時間只能執行一個線程。
在Python多線程下,每個線程的執行都需要進行鎖的競爭,只有拿到GIL的線程才能執行。
由於GIL的存在,python裏一個進程永遠只能同時執行一個線程,這就是為什麽多核CPU上,python的多線程效率並不高。
因為GIL的存在,python的多線程對CPU密集型代碼並不友好,對IO密集性代碼比較友好。
1因為計算密集型的程序,需要占用系統資源。
GIL的存在,相當於始終在進行單線程運算,速度慢。
2.IO密集型影響不大的原因,IO,input/output,這兩個詞就表明程序的瓶頸在於輸入
所消耗的時間,線程大部分時間再等待,所以他們是多個一起等(多線程)還是單個等(單線程)無所謂
多線程是共享內存的,即這些線程共用一個內存地址。好處在於便於線程間數據通信
和數據同步
多進程,各個進程地址之間是獨立的內存地址。這樣不存在地址之間通信就麻煩了
所消耗的時間,線程大部分時間再等待,所以他們是多個一起等(多線程)還是單個等(單線程)無所謂
多線程是共享內存的,即這些線程共用一個內存地址。好處在於便於線程間數據通信
和數據同步
多進程,各個進程地址之間是獨立的內存地址。這樣不存在地址之間通信就麻煩了
Python全局解釋器鎖(GIL)