python中如何切換GIL?
1、通過判斷指令計數(shù)器切換GIL
(1)python的解釋器是在一個大的循環(huán)中逐個解析字節(jié)碼指令;
(2)每次循環(huán)開始都會檢查一下_Py_Ticker的值。
{
...
for(;;)
...
if(--_Py_Ticker<0){
...
_Py_Ticker=_Py_CheckInterval;
...
if(interpreter_lock){
...
PyThread_release_lock(interpreter_lock);
PyThread_acquire_lock(interpreter_lock,1);
}
}
...
switch(opcode){
case:...
}
}
}
2、IO阻塞之前切換GIL
Python允許在執(zhí)行block型的systemcall之前允許其他線程執(zhí)行(Py_BEGIN_ALLOW_THREADS),然后再重新嘗試獲取GIL(Py_END_ALLOW_THREADS)。
#definePy_BEGIN_ALLOW_THREADS{\
PyThreadState*_save;\
_save=PyEval_SaveThread();
以上就是Python中切換GIL的方法,希望對大家有所幫助。更多Python學(xué)習(xí)推薦:請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。