python gil锁_python中的GIL锁
熟悉python的都知道,在C語言寫的python解釋器中存在全局解釋器鎖,由于全局解釋器鎖的存在,在同一時間內,python解釋器只能運行一個線程的代碼,這大大影響了python多線程的性能。而這個解釋器鎖由于歷史原因,現在幾乎無法消除。
python GIL 之所以會影響多線程等性能,是因為在多線程的情況下,只有當線程獲得了一個全局鎖的時候,那么該線程的代碼才能運行,而全局鎖只有一個,所以使用python多線程,在同一時刻也只有一個線程在運行,因此在即使在多核的情況下也只能發揮出單核的性能。
既然python在同一時刻下只能運行一個線程的代碼,那線程之間是如何調度的呢?
對于有io操作的線程,當一個線程在做io操作的時候,因為io操作不需要cpu,所以,這個時候,python會釋放python全局鎖,這樣其他需要運行的線程就會使用該鎖。
對于cpu密集型的線程,比如一個線程可能一直需要使用cpu做計算,那么python中會有一個執行指令的計數器,當一個線程執行了一定數量的指令時,該線程就會停止執行并讓出當前的鎖,這樣其他的線程就可以執行代碼了。
由上面可知,至少有兩種情況python會做線程切換,一是一但有IO操作時,會有線程切換,二是當一個線程連續執行了一定數量的指令時,會出現線程切換。當然此處的線程切換不一定就一定會切換到其他線程執行,因為如果當前線程 優先級比較高的話,可能在讓出鎖以后,又繼續獲得鎖,并優先執行。
在做科學計算的時候是用的單線程,因為這種計算是需要CPU一直做計算的,如果用多線程反而會降低計算速度。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python gil锁_python中的GIL锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python if main_pytho
- 下一篇: java在线学习系统源码_Java在线考