系統(tǒng)之家 - 系統(tǒng)光盤(pán)下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > 多進(jìn)程和多線程的優(yōu)缺點(diǎn)分析

多進(jìn)程和多線程的區(qū)別是什么?多進(jìn)程和多線程的優(yōu)缺點(diǎn)分析

時(shí)間:2017-10-25 16:35:08 作者:chunhua 來(lái)源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請(qǐng)使用手機(jī)瀏覽器訪問(wèn): https://m.xitongzhijia.net/xtjc/20171025/109976.html 手機(jī)查看 評(píng)論

  多進(jìn)程和多線程的區(qū)別是什么?此前小編給大家介紹了進(jìn)程和線程的區(qū)別,那么大家知道多進(jìn)程和多線程的區(qū)別又是什么嗎?它們分別有什么優(yōu)缺點(diǎn)?為了解決大家的疑惑,小編特地為大家整理了以下教程,希望對(duì)大家有所幫助。

多進(jìn)程和多線程的區(qū)別是什么?多進(jìn)程和多線程的優(yōu)缺點(diǎn)分析

  前言:

  多進(jìn)程,Windows 應(yīng)用程序中消息有兩種送出途徑;直接和排隊(duì)。Windows或某些運(yùn)行的應(yīng)用程序可直接發(fā)布消息給窗口過(guò)程,或者,消息可送到消息列象連續(xù)不斷輪詢(xún)消息隊(duì)列的OS中當(dāng)前執(zhí)行的每個(gè)進(jìn)程都 事件驅(qū)動(dòng)程序不是由事件的順序來(lái)控制,而是由事件的發(fā)生來(lái)控,而事件的發(fā)生是隨機(jī)的、不確定的,這就允許程序的用戶用各種合理的順序來(lái)安排程序的流程。

  多線程(英語(yǔ):multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對(duì)稱(chēng)多處理機(jī)、多核心處理器以及芯片級(jí)多處理(Chip-level multithreading)或同時(shí)多線程(Simultaneous multithreading)處理器。[1] 在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程(臺(tái)灣譯作“執(zhí)行緒”),進(jìn)而提升整體處理性能。

  一、多進(jìn)程和多線程的區(qū)別是什么?

  在Linux下編程多用多進(jìn)程編程少用多線程編程。

  IBM有個(gè)家伙做了個(gè)測(cè)試,發(fā)現(xiàn)切換線程context的時(shí)候,windows比linux快一倍多。進(jìn)出最快的鎖(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。當(dāng)然這并不是說(shuō)linux不好,而且在經(jīng)過(guò)實(shí)際編程之后,綜合來(lái)看我覺(jué)得linux更適合做high performance server,不過(guò)在多線程這個(gè)具體的領(lǐng)域內(nèi),linux還是稍遜windows一點(diǎn)。這應(yīng)該是情有可原的,畢竟unix家族都是從多進(jìn)程過(guò)來(lái)的,而 windows從頭就是多線程的。

  如果是UNIX/linux環(huán)境,采用多線程沒(méi)必要。

  多線程比多進(jìn)程性能高?誤導(dǎo)!

  應(yīng)該說(shuō),多線程比多進(jìn)程成本低,但性能更低。

  在UNIX環(huán)境,多進(jìn)程調(diào)度開(kāi)銷(xiāo)比多線程調(diào)度開(kāi)銷(xiāo),沒(méi)有顯著區(qū)別,就是說(shuō),UNIX進(jìn)程調(diào)度效率是很高的。內(nèi)存消耗方面,二者只差全局?jǐn)?shù)據(jù)區(qū),現(xiàn)在內(nèi)存都很便宜,服務(wù)器內(nèi)存動(dòng)輒若干G,根本不是問(wèn)題。

  多進(jìn)程是立體交通系統(tǒng),雖然造價(jià)高,上坡下坡多耗點(diǎn)油,但是不堵車(chē)。

  多線程是平面交通系統(tǒng),造價(jià)低,但紅綠燈太多,老堵車(chē)。

  我們現(xiàn)在都開(kāi)跑車(chē),油(主頻)有的是,不怕上坡下坡,就怕堵車(chē)。

  高性能交易服務(wù)器中間件,如TUXEDO,都是主張多進(jìn)程的。實(shí)際測(cè)試表明,TUXEDO性能和并發(fā)效率是非常高的。TUXEDO是貝爾實(shí)驗(yàn)室的,與UNIX同宗,應(yīng)該是對(duì)UNIX理解最為深刻的,他們的意見(jiàn)應(yīng)該具有很大的參考意義。

  二、多進(jìn)程和多線程的優(yōu)缺點(diǎn)分析:

  多進(jìn)程:

  多進(jìn)程優(yōu)點(diǎn):

  1、每個(gè)進(jìn)程互相獨(dú)立,不影響主程序的穩(wěn)定性,子進(jìn)程崩潰沒(méi)關(guān)系;

  2、通過(guò)增加CPU,就可以容易擴(kuò)充性能;

  3、可以盡量減少線程加鎖/解鎖的影響,極大提高性能,就算是線程運(yùn)行的模塊算法效率低也沒(méi)關(guān)系;

  4、每個(gè)子進(jìn)程都有2GB地址空間和相關(guān)資源,總體能夠達(dá)到的性能上限非常大。

  多進(jìn)程缺點(diǎn):

  1、邏輯控制復(fù)雜,需要和主程序交互;

  2、需要跨進(jìn)程邊界,如果有大數(shù)據(jù)量傳送,就不太好,適合小數(shù)據(jù)量傳送、密集運(yùn)算 多進(jìn)程調(diào)度開(kāi)銷(xiāo)比較大;

  3、最好是多進(jìn)程和多線程結(jié)合,即根據(jù)實(shí)際的需要,每個(gè)CPU開(kāi)啟一個(gè)子進(jìn)程,這個(gè)子進(jìn)程開(kāi)啟多線程可以為若干同類(lèi)型的數(shù)據(jù)進(jìn)行處理。當(dāng)然你也可以利用多線程+多CPU+輪詢(xún)方式來(lái)解決問(wèn)題……

  4、方法和手段是多樣的,關(guān)鍵是自己看起來(lái)實(shí)現(xiàn)方便有能夠滿足要求,代價(jià)也合適。

  多線程:

  多線程的優(yōu)點(diǎn):

  1、無(wú)需跨進(jìn)程邊界;

  2、程序邏輯和控制方式簡(jiǎn)單;

  3、所有線程可以直接共享內(nèi)存和變量等;

  4、線程方式消耗的總資源比進(jìn)程方式好。

  多線程缺點(diǎn):

  1、每個(gè)線程與主程序共用地址空間,受限于2GB地址空間;

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

  3、一個(gè)線程的崩潰可能影響到整個(gè)程序的穩(wěn)定性;

  4、到達(dá)一定的線程數(shù)程度后,即使再增加CPU也無(wú)法提高性能,例如Windows Server 2003,大約是1500個(gè)左右的線程數(shù)就快到極限了(線程堆棧設(shè)定為1M),如果設(shè)定線程堆棧為2M,還達(dá)不到1500個(gè)線程總數(shù);

  5、線程能夠提高的總性能有限,而且線程多了之后,線程本身的調(diào)度也是一個(gè)麻煩事兒,需要消耗較多的CPU。

  關(guān)于多進(jìn)程和多線程的區(qū)別就給大家介紹到這里了,還蒙在鼓里的伙伴,趕緊看看以上教程吧!相信你會(huì)有所收獲!

發(fā)表評(píng)論

0

沒(méi)有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見(jiàn)解

立即評(píng)論

以上留言?xún)H代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場(chǎng)

其他版本軟件

人氣教程排行

相關(guān)系統(tǒng)推薦

官方交流群 軟件收錄