【Python面試題】簡單談下GIL:
Global Interpreter Lock(全局解釋器鎖)
Python代碼的執(zhí)行由Python 虛擬機(jī)(也叫解釋器主循環(huán),CPython版本)來控制,Python 在設(shè)計之初就考慮到要在解釋器的主循環(huán)中,同時只有一個線程在執(zhí)行,即在任意時刻,只有一個線程在解釋器中運行。對Python 虛擬機(jī)的訪問由全局解釋器鎖(GIL)來控制,正是這個鎖能保證同一時刻只有一個線程在運行。
在多線程環(huán)境中,Python 虛擬機(jī)按以下方式執(zhí)行:
- 設(shè)置GIL
- 切換到一個線程去運行
- 運行:
? ??a. 指定數(shù)量的字節(jié)碼指令,或者
? ? b. 線程主動讓出控制(可以調(diào)用time.sleep(0)) - 把線程設(shè)置為睡眠狀態(tài)
- 解鎖GIL
- 再次重復(fù)以上所有步驟