GIL全域性直譯器鎖

2022-08-02 06:00:16 字數 980 閱讀 4255

1、什麼是gil全域性直譯器鎖?

gil並不是python的特性,而是cpython直譯器的概念。python完全可以不依賴於gil。

gil本質是一把互斥鎖,是加在cpython直譯器身上的,同乙個程序內的所有執行緒都需要先搶到gil鎖,才能執行直譯器**

2、為什麼會有gil?

為了利用多核,python開始支援多執行緒,而解決多執行緒之間資料完整性和狀態同步的最簡單方法自然就是加鎖,於是有了gil這把超級大鎖。

簡單的說gil的存在更多的是歷史原因。

3、gil的影響

gil的存在會對多執行緒的效率有不小影響,gil會導致多執行緒無法很好的利用多核cpu的併發處理能力,甚至就幾乎等於python是個單執行緒的程式。

python的多執行緒在多核cpu上,只對於io密集型計算產生正面效果;而當有至少有乙個cpu密集型執行緒存在,那麼多執行緒效率會由於gil而大幅下降

優點:保證cpython直譯器記憶體管理的執行緒安全

4、如何避免受到gil的影響

1)、用multiprocessing替代thread

multiprocessing庫的出現很大程度上是為了彌補thread庫因為gil而低效的缺陷。它完整的複製了一套thread所提供的介面方便遷移。唯一的不同就是它使用了多程序而不是多執行緒。每個程序有自己的獨立的gil,因此也不會出現程序之間的gil爭搶。

但multiprocessing的引入會增加程式實現時執行緒間資料通訊和同步的困難。

2)、用其他直譯器

總結:

python gil其實是功能和效能之間權衡後的產物,它有其存在的合理性,也有較難改變的客觀因素。

1)、因為gil的存在,只有io密集場景下的多執行緒會得到較好的效能;

2)、如果對平行計算效能較高的程式可以考慮把核心部分也成c模組,或者索性用其他語言實現

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...