1. 程式人生 > >Python全局解釋器鎖(GIL)

Python全局解釋器鎖(GIL)

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)