當前位置:編程學習大全網 - 網絡軟體 - linux中多進程程序和多線程程序的區別

linux中多進程程序和多線程程序的區別

IBM有個家夥做了個測試,發現切換線程context的時候,windows比linux快壹倍多。進出最快的鎖(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。當然這並不是說linux不好,而且在經過實際編程之後,綜合來看我覺得linux更適合做high performance server,不過在多線程這個具體的領域內,linux還是稍遜windows壹點。這應該是情有可原的,畢竟unix家族都是從多進程過來的,而 windows從頭就是多線程的。

如果是UNIX/linux環境,采用多線程沒必要。

多線程比多進程性能高?誤導!

應該說,多線程比多進程成本低,但性能更低。

在UNIX環境,多進程調度開銷比多線程調度開銷,沒有顯著區別,就是說,UNIX進程調度效率是很高的。內存消耗方面,二者只差全局數據區,現在內存都很便宜,服務器內存動輒若幹G,根本不是問題。

多進程是立體交通系統,雖然造價高,上坡下坡多耗點油,但是不堵車。

多線程是平面交通系統,造價低,但紅綠燈太多,老堵車。

我們現在都開跑車,油(主頻)有的是,不怕上坡下坡,就怕堵車。

高性能交易服務器中間件,如TUXEDO,都是主張多進程的。實際測試表明,TUXEDO性能和並發效率是非常高的。TUXEDO是貝爾實驗室的,與UNIX同宗,應該是對UNIX理解最為深刻的,他們的意見應該具有很大的參考意義。

多線程的優點:

無需跨進程邊界;

程序邏輯和控制方式簡單;

所有線程可以直接***享內存和變量等;

線程方式消耗的總資源比進程方式好;

多線程缺點:

每個線程與主程序***用地址空間,受限於2GB地址空間;

線程之間的同步和加鎖控制比較麻煩;

壹個線程的崩潰可能影響到整個程序的穩定性;

到達壹定的線程數程度後,即使再增加CPU也無法提高性能,例如Windows Server 2003,大約是1500個左右的線程數就快到極限了(線程堆棧設定為1M),如果設定線程堆棧為2M,還達不到1500個線程總數;

線程能夠提高的總性能有限,而且線程多了之後,線程本身的調度也是壹個麻煩事兒,需要消耗較多的CPU

多進程優點:

每個進程互相獨立,不影響主程序的穩定性,子進程崩潰沒關系;

通過增加CPU,就可以容易擴充性能;

可以盡量減少線程加鎖/解鎖的影響,極大提高性能,就算是線程運行的模塊算法效率低也沒關系;

每個子進程都有2GB地址空間和相關資源,總體能夠達到的性能上限非常大

多線程缺點:

邏輯控制復雜,需要和主程序交互;

需要跨進程邊界,如果有大數據量傳送,就不太好,適合小數據量傳送、密集運算

多進程調度開銷比較大;

最好是多進程和多線程結合,即根據實際的需要,每個CPU開啟壹個子進程,這個子進程開啟多線程可以為若幹同類型的數據進行處理。當然妳也可以利用多線程+多CPU+輪詢方式來解決問題……

方法和手段是多樣的,關鍵是自己看起來實現方便有能夠滿足要求,代價也合適。

  • 上一篇:怎麽評價王嘉爾?
  • 下一篇:參加糖酒會需要自己準備什麽東西
  • copyright 2024編程學習大全網