国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Java3y / 2096人閱讀

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

一、淺層理解

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

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

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

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

當需要大量計算的時候優(yōu)先使用多線程。

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

強相關(guān)處理使用線程,弱相關(guān)使用進程。

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

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

可能要擴展多機分布式的用進程,多核分布式的用線程。

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

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

消耗資源的對比:

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

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

通訊方式:

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

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

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

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

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

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

環(huán)境:單核、簡單任務(wù)(打印字符串) 進程數(shù)/線程數(shù) 都是255

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

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

單核

環(huán)境:單核,創(chuàng)建、銷毀10萬個進程/線程

結(jié)論:數(shù)據(jù)可以看出,多線程比多進程在效率上有10多倍的優(yōu)勢。但不能讓我們在使用哪種并發(fā)模式上定性。

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

雙核

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

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/11768.html

相關(guān)文章

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

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

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

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

    codergarden 評論0 收藏0
  • 進程線程的一個簡單解釋

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

    番茄西紅柿 評論0 收藏0
  • 線程三分鐘就可以入個門了!

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

    awkj 評論0 收藏0

發(fā)表評論

0條評論

Java3y

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<