python GIL(全域性直譯器鎖)

2021-08-21 17:52:08 字數 577 閱讀 2856

cpython直譯器中存在乙個gil(全域性直譯器鎖),他的作用就是保證同一時刻只有乙個執行緒可以執行**,因此造成了我們使用多執行緒的時候無法實現並行

每個執行緒在執行的過程都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行**。

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

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

更換直譯器,比如jpython

使用程序(程序池)+協程實現——–(推薦)嵌入用c,c++等實現的執行緒操作編譯庫

guido的宣告:

結論

cpu密集型

在 處理像科學計算 這類需要持續使用cpu的任務的時候 單執行緒會比多執行緒快

io密集型

在 處理像io操作等可能引起阻塞的這類任務的時候 多執行緒會比單執行緒快

python GIL全域性直譯器鎖

什麼是gil python 的執行由python 虛擬機器 也叫直譯器主迴圈,cpython版本 來控制,python 在設計之初就考慮到要在直譯器的主迴圈中,同時只有乙個執行緒在執行,即在任意時刻,只有乙個執行緒在直譯器中執行。對python 虛擬機器的訪問由全域性直譯器鎖 gil 來控制,正是這...

python GIL 全域性直譯器鎖

在vmware虛擬軟體中將ubuntu設定為單核cpu 主線程死迴圈,佔滿cpu while true pass在vmware虛擬軟體中將ubuntu設定為雙核cpu import threading 子執行緒死迴圈 deftest while true pass t1 threading.thre...

Python GIL(全域性直譯器鎖)

在使用多執行緒的時候,由於使用的是c語言的直譯器,c語言直譯器存在乙個歷史問題,那就是同一時刻只能執行乙個執行緒,這就使得需要不停的來回切換執行緒的,每個執行緒在執行的過程都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行 gil就相當於乙個鎖,當乙個執行緒用時將執行緒鎖上,其他執行緒不能用,在...