Python線程指南,python線程

python中的多線程和JAVA中的多線程有什么區別嗎?

Python線程指南,python線程


python是支持多線程的,但是python里的多線程是單cpu意義上的多線程,它和多cpu上的多線程有著本質的區別,這是因為python存在一個叫Global Interpreter Lock(GIL)全局解釋器鎖 。在解釋器解釋執行任何 Python 代碼時,都需要先獲得這把鎖,也就是說在同一時刻內,只有一條線程可以在CPU中運行 。
但是python的多線程并不是毫無用處的 。當遇到 I/O 操作時會釋放這把GIL鎖,所以如果程序是一個IO密集型的程序,一個線程處在IO等待的時候另一個線程便可以取得鎖并在CPU中運行,這時就發揮了多線程的作用 。但如果是純計算的程序,沒有 I/O 操作,那么只有取得GIL鎖的線程可以在CPU中運行,其它的線程都處于等待狀態,等待持有GIL 鎖的線程的釋放鎖,也就相當于單線程在跑(而且上下文切換也會有所開銷) 。
【Python線程指南,python線程】既然Python解釋器是單線程的,還有進行多線程編程的必要嗎?
Python線程指南,python線程


謝小秘書邀請~~先簡單的回答:有必要 。首先,線程消耗的是CPU資源如果一個單線程內處理的業務邏輯會占用100%的CPU資源,那么,上了多線程也是沒有用的 。但這種情況很少,高CPU占用一般出現在內存計算場景下,或者不良代碼中錯誤的死循環 。正常情況下,CPU占用大于80%就需要進行代碼或設計的優化,或者服務器增加資源了 。
多線程場景適用于解決慢速IO的問題我們絕大部分的計算,都會依賴于很多外部資源IO,如磁盤讀寫、網絡訪問、數據庫訪問... 這些資源的訪問速度遠遠低于CPU的切換速度 。如果使用單線程進行操作時,就會長時間的等待IO的返回 。造成無效等待,性能低下 。所以即使是Python,為了充分利用CPU資源,提高性能,在通常的業務場景下使用多線程編程也是完全必要的 。
多核與Python多實例延續上面的問題,我們知道現在CPU大部分都是多核的,python為了避免單線程只能使用到一個核的問題,是有個multiprocessing 庫的,允許創建子進程(子進程數一般與核心數相同),來充分利用CPU資源 ?!?↓ ↓ 喜歡就點贊吧,歡迎各位評論指教,謝謝關注 -- 極迭代! 。

    推薦閱讀