python學習筆記(二十九)為什么python的多線程不能利用多核CPU


問題:為什么python的多線程不能利用多核CPU,但是咱們在寫代碼的時候,多線程的確是在並發,而且還比單線程快
原因:因為GIL,python只有一個GIL,運行python時,就要拿到這個鎖才能執行,在遇到I/O 操作時會釋放這把鎖。
如果是純計算的程序,沒有 I/O 操作,解釋器會每隔100次操作就釋放這把鎖,讓別的線程有機會 執行(這個次數可以通sys.setcheckinterval
來調整)同一時間只會有一個獲得GIL線程在跑,其他線程都處於等待狀態
1、如果是CPU密集型代碼(循環、計算等),由於計算工作量多和大,計算很快就會達到100,然后觸發GIL的釋放與在競爭,多個線程來回切換損耗資源,
所以在多線程遇到CPU密集型代碼時,單線程會比較快
2、如果是I\O密集型代碼(文件處理、網絡爬蟲),開啟多線程實際上是並發(不是並行),IO操作會進行IO等待,線程A等待時,自動切換到線程B,
這樣就提升了效率


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM