GIL全局解釋器鎖

目錄程序員

1、GIL全局解釋器鎖

Python代碼的執行由Python虛擬機(也叫解釋器主循環)來控制。Python在設計之初就考慮到要在主循環中,同時只有一個線程在執行。雖然 Python 解釋器中能夠「運行」多個線程,但在任意時刻只有一個線程在解釋器中運行。多線程

對Python虛擬機的訪問由全局解釋器鎖(GIL)來控制,正是這個鎖能保證同一時刻只有一個線程在運行。函數

在多線程環境中,Python 虛擬機按如下方式執行:spa

  1. 設置 GIL;
  2. 切換到一個線程去運行;
  3. 運行指定數量的字節碼指令或者線程主動讓出控制(能夠調用 time.sleep(0));
  4. 把線程設置爲睡眠狀態;
  5. 解鎖 GIL;
  6. 再次重複以上全部步驟。

在調用外部代碼(如 C/C++擴展函數)的時候,GIL將會被鎖定,直到這個函數結束爲止(因爲在這期間沒有Python的字節碼被運行,因此不會作線程切換)編寫擴展的程序員能夠主動解鎖GIL。線程

相關文章
相關標籤/搜索