成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

操作系統(tǒng):多進(jìn)程、多線程

Java3y / 2100人閱讀

摘要:實(shí)際工作并不是非此即彼,往往都是進(jìn)程線程結(jié)合的方式。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于數(shù)目時(shí),不同的線程運(yùn)行于不同的上改善程序結(jié)構(gòu)。關(guān)于操作系統(tǒng)內(nèi)部如何創(chuàng)建銷毀進(jìn)程線程,即為什么這些操作進(jìn)程消耗會(huì)比線程大,還沒有搞明白。

一、淺層理解

進(jìn)程是資源分配的最小單位,線程是CPU分配的最小單位——簡(jiǎn)單明了的說明了進(jìn)程與線程的區(qū)別特點(diǎn),然而在實(shí)際工作中并沒有什么卵用。

二、多個(gè)維度下,進(jìn)程與線程的優(yōu)勢(shì)對(duì)比
對(duì)比維度 多進(jìn)程 多線程 結(jié)論
數(shù)據(jù)共享 數(shù)據(jù)共享復(fù)雜,需要用IPC 共享進(jìn)程數(shù)據(jù),數(shù)據(jù)共享簡(jiǎn)單 多進(jìn)程 < 多線程
數(shù)據(jù)同步 數(shù)據(jù)是分開的,同步簡(jiǎn)單 因?yàn)楣蚕磉M(jìn)程數(shù)據(jù),同步復(fù)雜 多進(jìn)程 > 多線程
內(nèi)存、CPU 占用內(nèi)存多,切換復(fù)雜,CPU利用率低 占用內(nèi)存少,切換簡(jiǎn)單,CPU利用率高 多進(jìn)程 < 多線程
創(chuàng)建、銷毀、切換 創(chuàng)建、銷毀、切換相對(duì)復(fù)雜,速度慢 創(chuàng)建、銷毀、切換簡(jiǎn)單,速度快 多進(jìn)程 < 多線程
編程、調(diào)試復(fù)雜度 編程調(diào)試相對(duì)簡(jiǎn)單 都很復(fù)雜 多進(jìn)程 > 多線程
可靠性 進(jìn)程之間不會(huì)相互影響 一個(gè)線程掛掉,會(huì)導(dǎo)致整個(gè)進(jìn)程掛掉 多進(jìn)程 < 多線程
分布式 適應(yīng)于多核、多機(jī)分布式;如果一臺(tái)機(jī)器不夠,擴(kuò)展到多臺(tái)機(jī)器比較簡(jiǎn)單 適應(yīng)于多核分布式 多進(jìn)程 > 多線程
三、簡(jiǎn)單結(jié)論

當(dāng)需要比較頻繁的創(chuàng)建、銷毀時(shí),優(yōu)先用多線程。

比如Web服務(wù)器,來一個(gè)連接創(chuàng)建一個(gè)線程,斷了就銷毀。

當(dāng)需要大量計(jì)算的時(shí)候優(yōu)先使用多線程。

所謂大量計(jì)算,當(dāng)然就是要耗費(fèi)很多CPU,切換頻繁了,這種情況下線程是最合適的。最常見的例子就是圖像處理、算法處理。

強(qiáng)相關(guān)處理使用線程,弱相關(guān)使用進(jìn)程。

什么叫強(qiáng)相關(guān)、弱相關(guān)?理論上很難定義,給個(gè)簡(jiǎn)單的例子就明白了。
一般的Server需要完成如下任務(wù):消息收發(fā)、消息處理?!跋⑹瞻l(fā)”和“消息處理”就是弱相關(guān)的任務(wù),而“消息處理”里面可能又分為“消息解碼”、“業(yè)務(wù)處理”,這兩個(gè)任務(wù)相對(duì)來說相關(guān)性就要強(qiáng)多了。因此“消息收發(fā)”和“消息處理”可以分進(jìn)程設(shè)計(jì),“消息解碼”、“業(yè)務(wù)處理”可以分線程設(shè)計(jì)。

以上劃分方式也非一成不變,需要根據(jù)實(shí)際情況進(jìn)行調(diào)整。

可能要擴(kuò)展多機(jī)分布式的用進(jìn)程,多核分布式的用線程。

兩者沒有明顯差別,推薦用自己最熟悉、最拿手的方式。

實(shí)際工作并不是非此即彼,往往都是“進(jìn)程+線程”結(jié)合的方式。

消耗資源的對(duì)比:

從內(nèi)核的觀點(diǎn)看,進(jìn)程的目的就是擔(dān)當(dāng)分配系統(tǒng)資源(CPU時(shí)間、內(nèi)存等)的基本單位。線程是進(jìn)程的一個(gè)執(zhí)行流,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。

線程,它們彼此之間使用相同的地址空間,共享大部分?jǐn)?shù)據(jù),啟動(dòng)一個(gè)線程所花費(fèi)的空間遠(yuǎn)遠(yuǎn)小于啟動(dòng)一個(gè)進(jìn)程所花費(fèi)的空間,而且,線程間彼此切換所需的時(shí)間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間切換所需要的時(shí)間。據(jù)統(tǒng)計(jì),總的說來,一個(gè)進(jìn)程的開銷大約是一個(gè)線程開銷的30倍左右,當(dāng)然,在具體的系統(tǒng)上,這個(gè)數(shù)據(jù)可能會(huì)有較大的區(qū)別。

通訊方式:

進(jìn)程之間傳遞數(shù)據(jù)只能是通過通訊的方式,即費(fèi)時(shí)又不方便。線程之間數(shù)據(jù)大部分共享(線程函數(shù)內(nèi)部不共享),快捷方便。但是數(shù)據(jù)同步需要鎖,對(duì)于static變量尤其注意。

線程的自身優(yōu)勢(shì):

提高應(yīng)用程序響應(yīng);使多CPU系統(tǒng)更加有效。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于CPU數(shù)目時(shí),不同的線程運(yùn)行于不同的CPU上;

改善程序結(jié)構(gòu)。一個(gè)既長(zhǎng)又復(fù)雜的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。

四、實(shí)驗(yàn)測(cè)試結(jié)果 (由于實(shí)驗(yàn)并非本人完成,故只記錄實(shí)驗(yàn)環(huán)境、條件以及結(jié)果。待老子有更多相關(guān)的感觸會(huì)再次補(bǔ)充)

任務(wù)執(zhí)行效率的比較

環(huán)境:?jiǎn)魏恕⒑?jiǎn)單任務(wù)(打印字符串) 進(jìn)程數(shù)/線程數(shù) 都是255

結(jié)論:任務(wù)量較小,多線程效率明顯高于多進(jìn)程。任務(wù)量較大時(shí)多線程不如多進(jìn)程效率高。

在創(chuàng)建和銷毀上的效率比較

單核

環(huán)境:?jiǎn)魏?,?chuàng)建、銷毀10萬個(gè)進(jìn)程/線程

結(jié)論:數(shù)據(jù)可以看出,多線程比多進(jìn)程在效率上有10多倍的優(yōu)勢(shì)。但不能讓我們?cè)谑褂媚姆N并發(fā)模式上定性。

另外:預(yù)先派生子進(jìn)程/線程比現(xiàn)場(chǎng)創(chuàng)建子進(jìn)程/線程要復(fù)雜很多,不僅要對(duì)池中進(jìn)程/線程數(shù)量進(jìn)行動(dòng)態(tài)管理,還要解決多進(jìn)程/多線程對(duì)accept的“搶” 問題,在stevens的測(cè)試程序中,使用了“驚群”和“鎖”技術(shù)。即使stevens的數(shù)據(jù)表格中,預(yù)先派生線程也不見得比現(xiàn)場(chǎng)創(chuàng)建線程快,在 《Unix網(wǎng)絡(luò)編程》第三版中,新作者參照stevens的測(cè)試也提供了一組數(shù)據(jù),在這組數(shù)據(jù)中,現(xiàn)場(chǎng)創(chuàng)建線程模式比預(yù)先派生線程模式已有了效率上的優(yōu)勢(shì)。因此:預(yù)先派生進(jìn)程/線程的模式(進(jìn)程池、線程池)技術(shù),不僅復(fù)雜,在效率上也無優(yōu)勢(shì),在新的應(yīng)用中可以放心大膽地為客戶連接請(qǐng)求去現(xiàn)場(chǎng)創(chuàng)建進(jìn)程和線程。

雙核

環(huán)境:雙核,其它同上。

結(jié)論:雙核處理器在完成任務(wù)量較少時(shí),沒有系統(tǒng)其他瓶頸因素影響時(shí)基本上是單核的兩倍,在任務(wù)量較多時(shí),受系統(tǒng)其他瓶頸因素的影響,速度明顯趨近于單核的速度。

五、并發(fā)服務(wù)的不可預(yù)測(cè)性:

后續(xù)待補(bǔ)。(我只是似乎意會(huì)了,還不好言傳。。。)

關(guān)于操作系統(tǒng)內(nèi)部如何創(chuàng)建、銷毀進(jìn)程、線程,即為什么這些操作進(jìn)程消耗會(huì)比線程大,還沒有搞明白。日后待補(bǔ)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11768.html

相關(guān)文章

  • python大佬養(yǎng)成計(jì)劃----進(jìn)程線程進(jìn)程

    摘要:在一個(gè)進(jìn)程內(nèi)部,要同時(shí)干多件事,就需要同時(shí)運(yùn)行多個(gè)子任務(wù),我們把進(jìn)程內(nèi)的這些子任務(wù)稱為線程。總結(jié)一下,多任務(wù)的實(shí)現(xiàn)方式有三種多進(jìn)程模式多線程模式多進(jìn)程多線程模式線程是最小的執(zhí)行單元,而進(jìn)程由至少一個(gè)線程組成。 進(jìn)程與線程 很多同學(xué)都聽說過,現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持多任務(wù)的操作系統(tǒng)。 什么叫多任務(wù)呢?簡(jiǎn)單地說,就是操作系統(tǒng)可以同時(shí)...

    taowen 評(píng)論0 收藏0
  • 大話javascript 4期:事件循環(huán)(1)

    摘要:腳本執(zhí)行,事件處理等。引擎線程,也稱為內(nèi)核,負(fù)責(zé)處理腳本程序,例如引擎。事件觸發(fā)線程,用來控制事件循環(huán)可以理解為,引擎線程自己都忙不過來,需要瀏覽器另開線程協(xié)助。異步請(qǐng)求線程,也就是發(fā)出請(qǐng)求后,接收響應(yīng)檢測(cè)狀態(tài)變更等都是這個(gè)線程管理的。 一、進(jìn)程與線程 現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持多任務(wù)的操作系統(tǒng)。 什么叫多任務(wù)呢?簡(jiǎn)單地說,就是操...

    codergarden 評(píng)論0 收藏0
  • 進(jìn)程線程的一個(gè)簡(jiǎn)單解釋

    摘要:線程線程,有時(shí)被稱為輕量級(jí)進(jìn)程,,是程序執(zhí)行流的最小單元。進(jìn)程和線程區(qū)別進(jìn)程是資源分配的基本單位。說得簡(jiǎn)單點(diǎn),下面這段代碼執(zhí)行的時(shí)候參考博文進(jìn)程與線程的一個(gè)簡(jiǎn)單解釋多線程和多進(jìn)程的區(qū)別小結(jié)多線程還是多進(jìn)程的選擇及區(qū)別加鎖 關(guān)于進(jìn)程與線程的簡(jiǎn)單理解(以工廠舉例:cup-》工廠,車間-》進(jìn)程,線程-》工人),可以參考阮一峰的博文進(jìn)程與線程的一個(gè)簡(jiǎn)單圖文解釋 先來了解下進(jìn)程和線程的概念關(guān)于多...

    番茄西紅柿 評(píng)論0 收藏0
  • 線程三分鐘就可以入個(gè)門了!

    摘要:系統(tǒng)級(jí)線程核心級(jí)線程由操作系統(tǒng)內(nèi)核進(jìn)行管理。值得注意的是多線程的存在,不是提高程序的執(zhí)行速度。實(shí)現(xiàn)多線程上面說了一大堆基礎(chǔ),理解完的話。虛擬機(jī)的啟動(dòng)是單線程的還是多線程的是多線程的。 前言 之前花了一個(gè)星期回顧了Java集合: Collection總覽 List集合就這么簡(jiǎn)單【源碼剖析】 Map集合、散列表、紅黑樹介紹 HashMap就是這么簡(jiǎn)單【源碼剖析】 LinkedHashMa...

    awkj 評(píng)論0 收藏0

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<