在使用多執行緒的時候,由於使用的是c語言的直譯器,c語言直譯器存在乙個歷史問題,那就是同一時刻只能執行乙個執行緒
,這就使得需要不停的來回切換執行緒的,每個執行緒在執行的過程都需要先獲取gil
,保證同一時刻只有乙個執行緒
可以執行**。
gil就相當於乙個鎖,當乙個執行緒用時將執行緒鎖上,其他執行緒不能用,在極短的時間裡,不同執行緒之間來回切換,實現多執行緒
計算密集型
大量的時間來計算資料的程式用多程序
io密集型
大量時間用來讀寫,等待網路連線,用多執行緒,協程
多程序每個核都用
多執行緒只用乙個核
gil面試題如下
描述python gil的概念, 以及它對python多執行緒的影響?編寫乙個多執行緒抓取網頁的程式,並闡明多執行緒抓取程式是否可比單執行緒效能有提公升,並解釋原因。
參***:
如何解決gil的問題?
1,換直譯器,將cpython直譯器換為其他直譯器、
2,讓python呼叫執行其他語言
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...