當前位置:成語大全網 - 新華字典 - 為什麽使用了線程池速度沒有變化呢python

為什麽使用了線程池速度沒有變化呢python

單線程

在我的4核 CPU 計算機中,單線程所花的時間是 6.5 秒。

多線程

創建兩個子線程 t1、t2,每個線程各執行 5 千萬次減操作,等兩個線程都執行完後,主線程終止程序運行。結果,兩個線程以合作的方式執行是 6.8 秒,反而變慢了。按理來說,兩個線程同時並行地運行在兩個 CPU 之上,時間應該減半才對,現在不減反增。

是什因導致多線麽原程不快反慢的呢?

原因就在於 GIL ,在 Cpython 解釋器中,有壹把全局解釋鎖(Global Interpreter Lock),在解釋器解釋執行 Python 代碼時,先要得到這把鎖,意味著,任何時候只可能有壹個線程在執行代碼,其它線程要想獲得 CPU 執行代碼指令,就必須先獲得這把鎖,如果鎖被其它線程占用了,那麽該線程就只能等待,直到占有該鎖的線程釋放鎖才有執行代碼指令的可能。

因此,這也就是為什麽兩個線程壹起執行反而更加慢的原因,因為同壹時刻,只有壹個線程在運行,其它線程只能等待,即使是多核CPU,也沒辦法讓多個線程並行執行代碼,只能是交替執行,因為多線程涉及到上線文切換、鎖機制處理(獲取鎖,釋放鎖等),所以,多線程執行不快反慢。