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