090 GIL(全域性直譯器鎖)

2021-09-24 12:03:05 字數 682 閱讀 6670

gil加在cpython直譯器中, 其他的python直譯器不會有gil。

python中的執行緒是作業系統的原生執行緒,python虛擬機器使用乙個全域性直譯器鎖(global interpreter lock)來互斥執行緒對python虛擬機器的使用。為了支援多執行緒機制,乙個基本的要求就是需要實現不同執行緒對共享資源訪問的互斥,所以引入了gil。

在乙個執行緒擁有了直譯器的訪問權之後,其他的所有執行緒都必須等待它釋放直譯器的訪問權,即使這些執行緒的下一條指令並不會互相影響。

在呼叫任何python c api之前,要先獲得gil

gil缺點:多處理器退化為單處理器;

gil優點:避免大量的加鎖解鎖操作

無論你啟多少個執行緒,你有多少個cpu, python在執行乙個程序的時候會淡定的在同一時刻只允許乙個執行緒執行。所以,python是無法利用多核cpu實現多執行緒的。

這樣,python對於計算密集型的任務開多執行緒的效率甚至不如序列(沒有大量切換),但是,對於io密集型的任務效率還是有顯著提公升的。

計算密集型:一直在使用cpu。

io密集型:存在大量io操作。

對於io密集型任務,python的多執行緒能夠節省時間。

對於計算密集型任務,python的多執行緒並沒有用。

GIL 全域性直譯器鎖

1 描述python中gil的概念,以及它對python多執行緒的影響?編寫乙個多執行緒抓取網頁的程式,並闡明多執行緒抓取程式是否可比單執行緒效能有提公升,並解釋原因。答 gil global interpreter lock,即全域性直譯器鎖 1 python語言和gil沒有半毛錢關係。僅僅是由於...

GIL全域性直譯器鎖

gil 啥?他是如何產生的?gil產生的背景 在cpython解釋內部執行多個執行緒的時候,每個執行緒都需要直譯器內部申請相應的全域性資源,由於c語言本身比較底層造成cpython在管理所有全域性資源的時候並不能應對所有執行緒同時的資源請求,因此為了防止資源競爭而發生錯誤,對所有執行緒申請全域性資源...

全域性直譯器鎖GIL

我們使用高併發,一次是建立1萬個執行緒去修改乙個數並列印結果看現象 from threading import thread import osdef func args global n n args print n,os.getpid n 100t list for i in range 100...