· 多進程:進程是資源分配的基本單位,它是程序執行時的一個實例。程序運行時,系統就會創建一個進程,并為它分配資源,然后把該進程放入進程就緒隊列,進程調度器選中它的時候就會為它分配CPU時間,程序開始真正運行。
· 多線程:線程是程序執行的最小單位,它是進程的一個執行流,是CPU調度和分派的基本單位,一個進程可以由很多線程組成,線程間共享進程的所有資源,每個線程有自己的堆棧和局部變量。線程由CPU獨立調度執行,在多CPU環境下就允許多個線程同時運行。同樣多線程也可以實現并發操作,每個請求分配一個線程來處理。
· 進程是資源分配的最小單位,線程是程序執行的最小單位。
· 進程有自己的獨立地址空間,每啟動一個進程,系統就會為它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴。而線程是共享進程中的數據的,使用相同的地址空間,因此CPU切換一個線程的花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多。
· 線程之間的通信更方便,同一進程下的進程共享全局變量、靜態變量等數據,而進程之間的通信需要以通信的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。
· 但是多進程程序更健壯,多線程程序只要有一個線程死掉,真個線程也死掉,而一個進程死掉不會對另一個進程造成影響,因為進程有自己獨立的地址空間。