117 GIL全局解釋器鎖

1、GIL全局解釋器鎖

cpython中自帶的GIL全局解釋器,GIL自己就是一把互斥鎖python

重點:由於有了GIL全局解釋器鎖,致使了在同一進程的同一時刻只有一個線程在執行,沒法利用多核優點程序員

其實就算咱們在程序中寫了一個線程的並行操做,實際上GIL會由於垃圾回收機制的問題,操做系統調度的問題,會把並行的線程仍是變成了串行,這正是這個GIL全局解釋器鎖致使了同一進程的同一時刻只有一個線程在運行,安全

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

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

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

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

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

2、爲何要有GIL全局解釋器鎖

由於cpython自帶的垃圾回收機制不是線程安全的,因此要有GIL鎖.設計

致使了同一個進程下,同一時間只能運行一個線程,沒法利用多核優點.code

相關文章
相關標籤/搜索