大幅提升執行效率:解析Python多執行緒和多進程的效能差異與使用情境

2023/08/15閱讀時間約 2 分鐘

最近在調整跟優化效能時,又來複習了 Multi-threading 和 Multiprocessing 的概念,在面對大數據時,能夠有效利用多核心處理器的能力,對於提升程式執行效能至關重要。

Python 提供多線程(Multi-threading) 和多進程 (Multiprocessing) 的功能,讓開發者可以很好的去運用硬體資源,加速任務執行,以下討論這兩功能的優勢與差異,以及適合的使用情境。

bing 眼裡的 multi-threading / multi-process

bing 眼裡的 multi-threading / multi-process

多線程(Multi-threading)與多進程(Multiprocessing)的概念

多線程與多進程都是用於實現並行處理的技術,但其差異在於處理資源的方式。-

  • 多線程是指在同一進程中運行多個執行緒,共享相同的記憶體空間
  • 多進程則是啟動多個獨立的進程,每個進程擁有獨立的記憶體空間。

由於Python的全局解釋器(GIL)限制了同一進程中只有一個執行緒可以執行Python指令,多線程在某些情況下可能無法充分利用多核處理器,而多進程可以避免這個限制。(GIL 概念可以參考底下連結)

所以有些時候,multi-threading 無法完全發揮到它的功能。

使用時機

多線程(Multi-threading)

多線程適用於I/O密集型任務,例如網路請求、檔案處理等。Python的threading模組提供了多線程的支援。使用多線程的好處在於:I/O 密集型任務: 多執行緒適用於處理需要等待外部資源(如網路請求、檔案讀寫、資料庫查詢等)的工作。因為執行緒在等待資源時,GIL的影響相對較小,而等待外部資源的時間佔據大部分,多執行緒可以更有效地利用等待時間。

  • 使用多線程:
    • I/O密集型任務,如網路請求、檔案處理。
    • 介面應用程式中的非同步任務,如UI更新。
    • 使用threading.Thread類別來建立執行緒,避免GIL限制的影響。
  • 使用多進程:
    • CPU密集型任務,如運算密集型計算、圖像處理。
    • 使用multiprocessing.Process類別建立進程,充分利用多核心處理器。

參考資料: Python的全局解釋器(GIL)

23會員
28內容數
歡迎來到《桃花源記》專欄。這裡不僅是一個文字的集合,更是一個探索、夢想和自我發現的空間。在這個專欄中,我們將一同走進那些隱藏在日常生活中的"桃花源"——那些讓我們心動、讓我們反思、讓我們找到內心平靜的時刻和地方
留言0
查看全部
發表第一個留言支持創作者!