這類我總結了一些進程與線程的特點和選取方法,若有錯誤,不吝指正(^.^)
進程是資源分配的最小單位,線程是CPU調度的最小單位(基本概念啦)
數據同步與共享:(平分秋色)
進程共享複雜需要IPC,數據分開同步簡單;
線程共享進程數據,共享簡單,但因此同步複雜;
內存CPU:(線程佔優)
進程佔用內存多,切換複雜,CPU利用率低;
線程佔用內存少,切換簡單,CPU利用率高;
創建銷燬和切換:(線程佔優)
進程複雜且慢;
線程簡單且塊;
編程與調試:(進程佔優)
進程編程與調試簡單;
線程編程與調試複雜;
可靠性:(進程佔優)
進程間不會影響;
線程dump整個進程dump;
分佈式:(進程佔優)
進程適應多核多機分佈式,一個機子不夠擴展到多臺機器方便;
線程適應多核分佈式;
優先情況:
線程優先頻繁創建銷燬,如Web服務器,一個連接建立一個線程,斷開則銷燬;
線程優先進行大量計算,如圖像處理、算法處理,因爲要消耗許多CPU,切換頻繁;
線程優先強相關處理、線程優先弱相關處理,強相關是當一列變量變化時另一列變量變化的可能性非常大的關係(如供求與價格),弱相關相反。這並不是一成不變的,要按照實際情況調整;
線程優先多核分佈,進程優先多機分佈;
都滿足時選擇最熟悉且拿手的方式。
在周麗論文的實驗中(博客上看的,大家可以搜到),任務量較大(此處是255線程/進程,輸出文字到控制檯和日誌文件,打印1000次時時間開銷進程小於線程,因爲有線程棧)進程效率高;
線程的銷燬開銷確實小於進程(在10萬個線程/進程的環境下,線程開銷是進程的約13分之一,同樣是周麗論文的實驗中的數據),因此在有大量銷燬的情況優先考慮線程。