[隨筆] 多執行緒 vs 多進程

最近因為遇到了這方面的問題,便去求助了一下google大神跟認識的大神
便順手把這篇記錄下來,當作備忘使用
首先,先說一下他們的英文名稱
multi-thread  => 多執行緒
multi-process => 多進程

大致上而言,在排程部分,multi-process是比multi-thread更消耗資源的東東(但也因此速度更快),因為multi-thread是全部放在一個process裡面,但multi-process則不是,所以在系統排程時會導致multi-process比multi-thread消耗更多資源。

在記憶體部分,multi-process的記憶體是分開的,所以要溝通的話必須調用系統函數而multi-thread因為他的記憶體都是放一起的,所以不用,但也不是說multi-thread沒有缺點,因為如果他同時對同一個區塊做io的話會造成混亂(如下圖所示),所以這時候便要加上mutex lock來鎖住他,不讓multi-thread能夠同時io,也就是說,當一個記憶體區塊被使用時,其他thread不能去碰它,看是要等他讓cpu空轉還是做其他事情(這也是造成效率高或低的主因,空等太多跟別人比起來會很慢),此外multi-process是每個process都有一份程式碼,但multi-thread則是所有thread都共用一份,而這在大的程式碼中最明顯,如果記憶體吃不消那就會被放到swap裡面,最後導致所有process都在等swap的io。


此外,如果multi-process其中一個當掉其他的還是能夠正常運行(雖然有些小問題,像是像是orphan process(parent process 當掉)或 zombie process (child process當掉,parent process就成了zombie)),但是如果multi-process當掉則是全部都被關掉(因為OS在處理時是以process下去看),舉例而言,就像chrome是多個process所以一個分頁當掉沒差,其他分頁還能正常運作

總而言之
速度方面 multi-process > multi-thread
資源消耗方面 multi-process > multi-thread
記憶體消耗方面 multi-process > multi-thread
若程式當掉,則multi-thread會全滅,但multi-process則不一定

留言

  1. 倒數第2行:但是如果multi-process當掉則是全部都被關掉(因為OS在處理時是以process下去看)

    請問是否有筆誤
    multi-process應該是multi-thread

    回覆刪除

張貼留言

這個網誌中的熱門文章

[Onenote]把pdf列印在同一頁

cmder 設定