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