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

2021-08-16 17:44:39 字數 1140 閱讀 2940

對比維度

多程序多執行緒

總結資料共享、同步

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

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

各有優勢

記憶體、cpu

占用記憶體多,切換複雜,cpu利用率低

占用記憶體少,切換簡單,cpu利用率高

執行緒佔優

建立銷毀、切換

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

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

執行緒佔優

程式設計、除錯

程式設計簡單,除錯簡單

程式設計複雜,除錯複雜

程序佔優

可靠性程序間不會互相影響

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

程序佔優

分布式適應於多核、多機分布式;如果一台機器不夠,擴充套件到多台機器比較簡單

適應於多核分布式

程序佔優

原因請看上面的對比。

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

這種原則最常見的應用就是

web伺服器了,來乙個連線建立乙個執行緒,斷了就銷毀執行緒,要是用程序,建立和銷毀的代價是很難承受的

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

所謂大量計算,當然就是要耗費很多

cpu,切換頻繁了,這種情況下執行緒是最合適的。

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

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

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

一般的server

需要完成如下任務:訊息收發、訊息處理。

「訊息收發」和

「訊息處理

」就是弱相關的任務,而

「訊息處理

」裡面可能又分為

「訊息解碼」、

「業務處理

」,這兩個任務相對來說相關性就要強多了。因此

「訊息收發」和

「訊息處理

」可以分程序設計,

「訊息解碼」、

「業務處理

」可以分執行緒設計。

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

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

原因請看上面對比。

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

多程序和多執行緒的應用場景

大cc的部落格 這裡的執行緒指通過linux的pthread create而產生的原生執行緒,執行緒資源很寶貴,能被作業系統的任務排程器看見的 不是python gevent go gorouine裡的概念 我們討論以下兩種模型 多程序單執行緒模型 以下簡稱為多程序 單程序多執行緒模型 以下簡稱為多...

多程序和多執行緒的應用場景

關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有的xdjm問 多程序好還是多執行緒好?linux下用多程序還是多執行緒?...

多執行緒和多程序的使用場景

較輕的上下文切換開銷,不用切換位址空間,不用更改暫存器,不用重新整理tlb。提供非均質的服務。如果全都是計算任務,但每個任務的耗時不都為1s,而是1ms 1s之間波動 這樣,多執行緒相比多程序的優勢就體現出來,它能有效降低 簡單任務被複雜任務壓住 的概率。nginx主流的工作模式是多程序模式 也支援...