多程序和多執行緒的區別及適用場景
原文地址:http://blog.csdn.net/wujiafei_njgcxy/article/details/77098977
對比維度 | 多程序 | 多執行緒 | 總結 |
資料共享、同步 | 資料共享複雜,需要用IPC;資料是分開的,同步簡單 | 因為共享程序資料,資料共享簡單,但也是因為這個原因導致同步複雜 | 各有優勢 |
記憶體、CPU | 佔用記憶體多,切換複雜,CPU利用率低 | 佔用記憶體少,切換簡單,CPU利用率高 | 執行緒佔優 |
建立銷燬、切換 | 建立銷燬、切換複雜,速度慢 | 建立銷燬、切換簡單,速度很快 | 執行緒佔優 |
程式設計、除錯 | 程式設計簡單,除錯簡單 | 程式設計複雜,除錯複雜 | 程序佔優 |
可靠性 | 程序間不會互相影響 | 一個執行緒掛掉將導致整個程序掛掉 | 程序佔優 |
分散式 | 適應於多核、多機 | 適應於多核分散式 | 程序佔優 |
原因請看上面的對比。
1)需要頻繁建立銷燬的優先用執行緒
這種原則最常見的應用就是Web伺服器了,來一個連線建立一個執行緒,斷了就銷燬執行緒,要是用程序,建立和銷燬的代價是很難承受的
2)需要進行大量計算的優先使用執行緒
所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下執行緒是最合適的。
這種原則最常見的是影象處理、演算法處理。
3)強相關的處理用執行緒,弱相關的處理用程序
什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。
一般的Server需要完成如下任務:訊息收發、訊息處理。“訊息收發”和“訊息處理”就是弱相關的任務,而
當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。
4)可能要擴充套件到多機分佈的用程序,多核分佈的用執行緒
原因請看上面對比。
5)都滿足需求的情況下,用你最熟悉、最拿手的方式