面試題:描述python gil的概念,以及它對python多執行緒的影響?編寫乙個多執行緒爬取網頁的程式,並闡明多執行緒抓取程式是否比單執行緒效能有提公升,並解釋原因。
(1)python語言和gil沒有關係,僅僅是由於歷史原因在cpython虛擬機器(直譯器),難以移除,解決辦法一:通過呼叫模組來解決,解決辦法二:更換直譯器。
(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鎖。
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(全域性直譯器鎖)
cpython直譯器中存在乙個gil 全域性直譯器鎖 他的作用就是保證同一時刻只有乙個執行緒可以執行 因此造成了我們使用多執行緒的時候無法實現並行 每個執行緒在執行的過程都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行 執行緒釋放gil鎖的情況 在io操作等可能會引起阻塞的system cal...