最近在調整跟優化效能時,又來複習了 Multi-threading 和 Multiprocessing 的概念,在面對大數據時,能夠有效利用多核心處理器的能力,對於提升程式執行效能至關重要。
Python 提供多線程(Multi-threading) 和多進程 (Multiprocessing) 的功能,讓開發者可以很好的去運用硬體資源,加速任務執行,以下討論這兩功能的優勢與差異,以及適合的使用情境。
多線程與多進程都是用於實現並行處理的技術,但其差異在於處理資源的方式。-
由於Python的全局解釋器(GIL)限制了同一進程中只有一個執行緒可以執行Python指令,多線程在某些情況下可能無法充分利用多核處理器,而多進程可以避免這個限制。(GIL 概念可以參考底下連結)
所以有些時候,multi-threading 無法完全發揮到它的功能。
多線程適用於I/O密集型任務,例如網路請求、檔案處理等。Python的threading
模組提供了多線程的支援。使用多線程的好處在於:I/O 密集型任務: 多執行緒適用於處理需要等待外部資源(如網路請求、檔案讀寫、資料庫查詢等)的工作。因為執行緒在等待資源時,GIL的影響相對較小,而等待外部資源的時間佔據大部分,多執行緒可以更有效地利用等待時間。
threading.Thread
類別來建立執行緒,避免GIL限制的影響。multiprocessing.Process
類別建立進程,充分利用多核心處理器。參考資料: Python的全局解釋器(GIL)