GIL 全域性直譯器鎖

2021-08-21 08:27:32 字數 608 閱讀 2740

1、描述python中gil的概念,以及它對python多執行緒的影響?編寫乙個多執行緒抓取網頁的程式,並闡明多執行緒抓取程式是否可比單執行緒效能有提公升,並解釋原因。

答:(gil:global interpreter lock,即全域性直譯器鎖)

(1)python語言和gil沒有半毛錢關係。僅僅是由於歷史原因在cpython虛擬機器(直譯器)中難以移除gil;

(2)gil:全域性直譯器鎖。每個執行緒在執行的過程都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行**;

(3)執行緒釋放gil鎖的情況: 在io操作等可能會引起阻塞的system call之前,可以暫時釋放gil,但在執行完畢後,必須重新獲取gil python 3.x使用計時器(執行時間達到閾值後,當前執行緒釋放gil)或python 2.x,tickets計數達到100;

(4)python使用多程序是可以利用多核的cpu資源的;

(5)多執行緒爬取比單執行緒效能有提公升,因為遇到io阻塞會自動釋放gil鎖。

2、如何解決gil問題(弊端)

(1)更換python直譯器,使用其他語言的直譯器;

(2)利用python膠水語言的特性,在子執行緒中呼叫其他語言(python以外)實現;

(3)使用多程序。

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

GIL 全域性直譯器鎖

對gil的理解 每個執行緒在執行的過程中都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行 多程序和多執行緒 因為gil的問題導致系統中同一時間點只能有乙個執行緒被直譯器解釋,這就導致了執行緒無法實現並行,無法充分的利用我們 計算機的多核 資源,python所謂的多執行緒程式設計就類似於單核cp...