線程是操作系統分配CPU的基本單位,進程是操作系統分配內存的基本單位。
通常我們運行的程序會包含一個或多個進程,而每個進程中又包含一個或多個線程。多線程的優點在于多個線程可以共享進程的內存空間,所以進程間的通信非常容易實現;
但是如果使用官方的CPython解釋器,多線程受制于GIL(全局解釋器鎖),并不能利用CPU的多核特性,這是一個很大的問題。使用多進程可以充分利用CPU的多核特性,但是進程間通信相對比較麻煩,需要使用IPC機制(管道、套接字等)。
多線程適合那些會花費大量時間在I/O操作上,但沒有太多并行計算需求且不需占用太多內存的I/O密集型應用。
多進程適合執行計算密集型任務(如:視頻編碼解碼、數據處理、科學計算等)、可以分解為多個并行子任務并能合并子任務執行結果的任務以及在內存使用方面沒有任何限制且不強依賴于I/O操作的任務。
擴展:Python中實現并發編程通常有多線程、多進程和異步編程三種選擇。
異步編程實現了協作式并發,通過多個相互協作的子程序的用戶態切換,實現對CPU的高效利用,這種方式也是非常適合I/O密集型應用的。