在python的原始解釋器CPython中存在著GIL(Global Interpreter Lock,全局解釋器鎖),因此在解釋執(zhí)行python代碼時,會產(chǎn)生互斥鎖來限制線程對資源的訪問,直到解釋器遇到I/O操作或者次數(shù)達(dá)到一定數(shù)目時才會釋放GIL。所以,CPython的線程庫直接封裝了系統(tǒng)的原生線程,但CPython整體作為一個進(jìn)程,同時只會有一個獲得GIL的線程在運(yùn)行,其他線程則處于等待狀態(tài)。這就造成了即使在多核cpu中,多線程也只是做著分時切換而已。不過multiprocess的出現(xiàn),已經(jīng)可以讓多進(jìn)程的python代碼編寫簡化到了類似多線程的程度
解決GIL:
1.能使用進(jìn)程不用線程
2.高效的代碼(多線程執(zhí)行的任務(wù))使用c,c++來編寫