大多數應用伺服器不需要程序間通訊。或避免程序間通訊,利用資料庫交換資訊。
在這個條件下,如果是unix/linux環境,採用多執行緒沒必要。
多執行緒比多程序效能高?誤導!
應該說,多執行緒比多程序成本低,但效能更低。
在unix環境,多程序排程開銷比多執行緒排程開銷,沒有顯著區別,就是說,unix程序排程效率是很高的。記憶體消耗方面,二者只差全域性資料區,現在記憶體都很便宜,伺服器記憶體動輒若干g,根本不是問題。
多程序是立體交通系統,雖然造價高,上坡下坡多耗點油,但是不堵車。
多執行緒是平面交通系統,造價低,但紅綠燈太多,老堵車。
我們現在都開跑車,油(主頻)有的是,不怕上坡下坡,就怕堵車。
高效能交易伺服器中介軟體,如tuxedo,都是主張多程序的。實際測試表明,tuxedo效能和併發效率是非常高的。
tuxedo是貝爾實驗室的,與unix同宗,應該是對unix理解最為深刻的,他們的意見應該具有很大的參考意義。
linux上,多執行緒有些是畫蛇添足的東西。
多執行緒,犧牲系統的優美和魯棒性,換來的東西很少很少。
排程和多程序一樣。記憶體節省一點,但程式失去的是容錯能力(就是一條魚能壞了一鍋湯)。
linux是用程序實現的執行緒。執行緒就是資料記憶體共享的程序。因此,除了節省一些記憶體外,無其他速度的優勢。
兄弟,沒上qq啊,剛看到你的貼子,一路看過來,覺得大家給的建義還不錯,那個把多程序和多執行緒比作交通設施的比喻比較不錯,我也認為多執行緒似乎跟高效能扯不上絕對的關係,真正的效能還是在於程式自身是不是讓cpu在全速執行,就是說沒有sleep或都阻塞在乙個什麼函式呼叫上。
而且我覺得你們討論的乙個片面性:似乎只研究系統在單機執行時的效能,我是做**交易系統後台的,這樣的系統的效能要求可想而知,但是後台程式沒有乙個使用多執行緒,而是採用多程序方式,其中有乙個核心的資料**程序,負責各個業務程序之間的資料互動,資料互動沒有任何ipc技術,全部採用socket通訊技術,這樣做的好處是部署極其靈活,可以擴充機器數量來提高系統處理效能,還可以從硬體上避免單點故障。
我覺得你的系統可以參考tuxedo的設計,採用多程序通訊,程序通訊採用socket技術,關鍵設計一下核心的資料交換程序,由它負責系統各個業務程序的互動,這樣可以通過擴充套件業務主機的數量來進行橫向擴充套件,業務與業務之間互不干涉,乙個業務程序掛了,其它業務還是正常執行。
有興趣上qq聊吧,我正在做這個資料交換程序,借監了tcp/ip鏈路層、網路層、傳輸層的設計,其實這裡說的資料交換程序其實就相當於訊息路由器,相關技術可以參考tcp/ip的網路層設計。
多執行緒 多程序?
這幾天在思考如何改進原型在多個客戶端的情況下的效能,特地溫習了一下多程序和多執行緒的一些知識。在linux下程序的程序和執行緒在核心看來區別很小,都是乙個可排程單元,都擁有記憶體管理結構等等。但是關鍵的差別是程序的資源都是私有的,而執行緒則是和別人共享的,所以執行緒的上下文切換可能比程序的開銷要小很...
多程序,多執行緒
多工程式設計 通過應用程式利用多個計算機核心達到多工同時執行的 目的,從此來提公升程式執行效率 多程序,多執行緒 程序 程式在計算機中一次執行的過程 程式 靜態的描述,不占有計算機資源 程序 是乙個動態的過程,占有cpu,記憶體等計算機資源 有一定的生命週期 同乙個程式,每次執行都是不同的程序,因為...
多執行緒 多程序
是什麼?能幹什麼?單執行緒情況下,執行效率低。系統的資源沒有得到充分利用。計算密集型 運算量比較大 io密集型 cpu空閒,輸入輸出較多 怎麼幹?爬蟲 io密集型 多執行緒 橫向 所有的程式的執行都在乙個執行緒中,程式啟動時,啟動多執行緒,每個執行緒跑同樣的 縱向 將程式進行拆分,每個執行緒跑特定的...