1. 程式人生 > >多程序和多執行緒的區別及適用場景

多程序和多執行緒的區別及適用場景

原文地址:http://blog.csdn.net/wujiafei_njgcxy/article/details/77098977

對比維度

多程序

多執行緒

總結

資料共享、同步

資料共享複雜,需要用IPC;資料是分開的,同步簡單

因為共享程序資料,資料共享簡單,但也是因為這個原因導致同步複雜

各有優勢

記憶體、CPU

佔用記憶體多,切換複雜,CPU利用率低

佔用記憶體少,切換簡單,CPU利用率高

執行緒佔優

建立銷燬、切換

建立銷燬、切換複雜,速度慢

建立銷燬、切換簡單,速度很快

執行緒佔優

程式設計、除錯

程式設計簡單,除錯簡單

程式設計複雜,除錯複雜

程序佔優

可靠性

程序間不會互相影響

一個執行緒掛掉將導致整個程序掛掉

程序佔優

分散式

適應於多核、多機

分散式;如果一臺機器不夠,擴充套件到多臺機器比較簡單

適應於多核分散式

程序佔優

原因請看上面的對比。

1)需要頻繁建立銷燬的優先用執行緒

這種原則最常見的應用就是Web伺服器了,來一個連線建立一個執行緒,斷了就銷燬執行緒,要是用程序,建立和銷燬的代價是很難承受的

2)需要進行大量計算的優先使用執行緒

所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下執行緒是最合適的。

這種原則最常見的是影象處理、演算法處理。

3)強相關的處理用執行緒,弱相關的處理用程序

什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。

一般的Server需要完成如下任務:訊息收發、訊息處理。訊息收發訊息處理就是弱相關的任務,而

訊息處理裡面可能又分為訊息解碼業務處理,這兩個任務相對來說相關性就要強多了。因此訊息收發訊息處理可以分程序設計,訊息解碼業務處理可以分執行緒設計。

當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。

4)可能要擴充套件到多機分佈的用程序,多核分佈的用執行緒

原因請看上面對比。

5)都滿足需求的情況下,用你最熟悉、最拿手的方式