Python面試真題- 在多線程環(huán)境中,Python 虛擬機(jī)按什么方式執(zhí)行 ?
【Python面試真題】- 在多線程環(huán)境中,Python 虛擬機(jī)按什么方式執(zhí)行 ?
1. 設(shè)置GIL
2. 切換到一個線程去運(yùn)行
3. 運(yùn)行:
a. 指定數(shù)量的字節(jié)碼指令,或者
b. 線程主動讓出控制(可以調(diào)用time.sleep(0))
4. 把線程設(shè)置為睡眠狀態(tài)
5. 解鎖GIL
6. 再次重復(fù)以上所有步驟
在調(diào)用外部代碼(如C/C++擴(kuò)展函數(shù))的時候,GIL 將會被鎖定,直到這個函數(shù)結(jié)束為止(由于在這期間沒有Python 的字節(jié)碼被運(yùn)行,所以不會做線程切換)。