①程式設計相對容易;通常不需要考慮鎖和同步資源的問題。
②更強的容錯性:比起多執行緒的乙個好處是乙個程序崩潰了不會影響其他程序。
③有核心保證的隔離:資料和錯誤隔離。 對於使用如c/c++這些語言編寫的本地**,錯誤隔離是非常有用的:採用多程序架構的程式一般可以做到一定程度的自恢復;(master守護程序監控所有worker程序,發現程序掛掉後將其重啟)。
①建立速度快,方便高效的資料共享
共享資料:多執行緒間可以共享同一虛擬位址空間;多程序間的資料共享就需要用到共享記憶體、訊號量等ipc技術。
②較輕的上下文切換開銷 - 不用切換位址空間,不用更改暫存器,不用重新整理tlb。
③提供非均質的服務。如果全都是計算任務,但每個任務的耗時不都為1s,而是1ms-1s之間波動;這樣,多執行緒相比多程序的優勢就體現出來,它能有效降低「簡單任務被複雜任務壓住」的概率。
1.nginx主流的工作模式是多程序模式(也支援多執行緒模型)
2.幾乎所有的web server伺服器服務都有多程序的,至少有乙個守護程序配合乙個worker程序,例如apached,httpd等等以d結尾的程序包括init.d本身就是0級總程序,所有你認知的程序都是它的子程序;
3.chrome瀏覽器也是多程序方式。 (原因:①可能存在一些網頁不符合程式設計規範,容易崩潰,採用多程序乙個網頁崩潰不會影響其他網頁;而採用多執行緒會。②網頁之間互相隔離,保證安全,不必擔心某個網頁中的惡意**會取得存放在其他網頁中的敏感資訊。)
4.redis也可以歸類到「多程序單執行緒」模型(平時工作是單個程序,涉及到耗時操作如持久化或aof重寫時會用到多個程序)
執行緒間有資料共享,並且資料是需要修改的(不同任務間需要大量共享資料或頻繁通訊時)。
提供非均質的服務(有優先順序任務處理)事件響應有優先順序。
單任務平行計算,在非cpu bound的場景下提高響應速度,降低時延。
與人有io互動的應用,良好的使用者體驗(鍵盤滑鼠的輸入,立刻響應)
案例:桌面軟體,響應使用者輸入的是乙個執行緒,後台程式處理是另外的執行緒;
執行緒與程序應用場景
1.計算密集型下程序與執行緒對比 import time,os from multiprocessing import process from threading import thread 計算密集型 def work res 0 for i in range 100000 res i if n...
redis的使用場景和優缺點
2 redis用來做什麼?通常侷限點來說,redis也以訊息佇列的形式存在,作為內嵌的list存在,滿足實時的高併發需求。而通常在乙個電商型別的資料處理過程之中,有關商品,熱銷,推薦排序的佇列,通常存放在redis之中,期間也包擴storm對於redis列表的讀取和更新。redis的缺點 是資料庫容...
多程序和多執行緒的應用場景
大cc的部落格 這裡的執行緒指通過linux的pthread create而產生的原生執行緒,執行緒資源很寶貴,能被作業系統的任務排程器看見的 不是python gevent go gorouine裡的概念 我們討論以下兩種模型 多程序單執行緒模型 以下簡稱為多程序 單程序多執行緒模型 以下簡稱為多...