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

原文:http://tutorials.jenkov.com/java-concurrency/benefits.html

作者:Jakob Jenkov ? ? ? ?翻譯:古圣昌 ? ? ? ? ? ?校對(duì):歐振聰

盡管面臨很多挑戰(zhàn)昵观,多線程有一些優(yōu)點(diǎn)使得它一直被使用匆帚。這些優(yōu)點(diǎn)是:

1悼凑、資源利用率更好

2、程序設(shè)計(jì)在某些情況下更簡(jiǎn)單

3蒋得、程序響應(yīng)更快

資源利用率更好

想象一下,一個(gè)應(yīng)用程序需要從本地文件系統(tǒng)中讀取和處理文件的情景。比方說(shuō)鸵膏,從磁盤(pán)讀取一個(gè)文件需要5秒,處理一個(gè)文件需要2秒法焰。處理兩個(gè)文件則需要:

1 ? ? ?5秒讀取文件A

2 ? ? ?2秒處理文件A

3 ? ? ?5秒讀取文件B

4 ? ? ?2秒處理文件B

5 ? ? ?---------------------

6 ? ? 總共需要14秒

從磁盤(pán)中讀取文件的時(shí)候秧荆,大部分的CPU時(shí)間用于等待磁盤(pán)去讀取數(shù)據(jù)。在這段時(shí)間里埃仪,CPU非常的空閑乙濒。它可以做一些別的事情。通過(guò)改變操作的順序卵蛉,就能夠更好的使用CPU資源颁股。看下面的順序:

1 ? ? ? 5秒讀取文件A

2 ? ? ? 5秒讀取文件B +2秒處理文件A

3 ? ? ? 2秒處理文件B

4 ? ? ? ---------------------

5 ? ? ?總共需要12秒

CPU等待第一個(gè)文件被讀取完傻丝。然后開(kāi)始讀取第二個(gè)文件甘有。當(dāng)?shù)诙募诒蛔x取的時(shí)候,CPU會(huì)去處理第一個(gè)文件葡缰。記住亏掀,在等待磁盤(pán)讀取文件的時(shí)候,CPU大部分時(shí)間是空閑的泛释。

總的說(shuō)來(lái)幌氮,CPU能夠在等待IO的時(shí)候做一些其他的事情。這個(gè)不一定就是磁盤(pán)IO胁澳。它也可以是網(wǎng)絡(luò)的IO该互,或者用戶輸入。通常情況下韭畸,網(wǎng)絡(luò)和磁盤(pán)的IO比CPU和內(nèi)存的IO慢的多宇智。

程序設(shè)計(jì)更簡(jiǎn)單

在單線程應(yīng)用程序中,如果你想編寫(xiě)程序手動(dòng)處理上面所提到的讀取和處理的順序胰丁,你必須記錄每個(gè)文件讀取和處理的狀態(tài)随橘。相反,你可以啟動(dòng)兩個(gè)線程锦庸,每個(gè)線程處理一個(gè)文件的讀取和操作机蔗。線程會(huì)在等待磁盤(pán)讀取文件的過(guò)程中被阻塞。在等待的時(shí)候甘萧,其他的線程能夠使用CPU去處理已經(jīng)讀取完的文件萝嘁。其結(jié)果就是,磁盤(pán)總是在繁忙地讀取不同的文件到內(nèi)存中扬卷。這會(huì)帶來(lái)磁盤(pán)和CPU利用率的提升牙言。而且每個(gè)線程只需要記錄一個(gè)文件,因此這種方式也很容易編程實(shí)現(xiàn)怪得。

程序響應(yīng)更快

將一個(gè)單線程應(yīng)用程序變成多線程應(yīng)用程序的另一個(gè)常見(jiàn)的目的是實(shí)現(xiàn)一個(gè)響應(yīng)更快的應(yīng)用程序咱枉。設(shè)想一個(gè)服務(wù)器應(yīng)用卑硫,它在某一個(gè)端口監(jiān)聽(tīng)進(jìn)來(lái)的請(qǐng)求。當(dāng)一個(gè)請(qǐng)求到來(lái)時(shí)蚕断,它去處理這個(gè)請(qǐng)求欢伏,然后再返回去監(jiān)聽(tīng)。

服務(wù)器的流程如下所述:

while(server is active){

listenforrequest

process

request

}

如果一個(gè)請(qǐng)求需要占用大量的時(shí)間來(lái)處理亿乳,在這段時(shí)間內(nèi)新的客戶端就無(wú)法發(fā)送請(qǐng)求給服務(wù)端颜懊。只有服務(wù)器在監(jiān)聽(tīng)的時(shí)候,請(qǐng)求才能被接收风皿。另一種設(shè)計(jì)是河爹,監(jiān)聽(tīng)線程把請(qǐng)求傳遞給工作者線程(worker?thread),然后立刻返回去監(jiān)聽(tīng)桐款。而工作者線程則能夠處理這個(gè)請(qǐng)求并發(fā)送一個(gè)回復(fù)給客戶端咸这。這種設(shè)計(jì)如下所述:

while(server is active){

listenforrequest

hand

request to worker thread

}

這種方式,服務(wù)端線程迅速地返回去監(jiān)聽(tīng)魔眨。因此媳维,更多的客戶端能夠發(fā)送請(qǐng)求給服務(wù)端。這個(gè)服務(wù)也變得響應(yīng)更快遏暴。

桌面應(yīng)用也是同樣如此侄刽。如果你點(diǎn)擊一個(gè)按鈕開(kāi)始運(yùn)行一個(gè)耗時(shí)的任務(wù),這個(gè)線程既要執(zhí)行任務(wù)又要更新窗口和按鈕朋凉,那么在任務(wù)執(zhí)行的過(guò)程中州丹,這個(gè)應(yīng)用程序看起來(lái)好像沒(méi)有反應(yīng)一樣。相反杂彭,任務(wù)可以傳遞給工作者線程(word?thread)墓毒。當(dāng)工作者線程在繁忙地處理任務(wù)的時(shí)候,窗口線程可以自由地響應(yīng)其他用戶的請(qǐng)求亲怠。當(dāng)工作者線程完成任務(wù)的時(shí)候所计,它發(fā)送信號(hào)給窗口線程。窗口線程便可以更新應(yīng)用程序窗口团秽,并顯示任務(wù)的結(jié)果主胧。對(duì)用戶而言,這種具有工作者線程設(shè)計(jì)的程序顯得響應(yīng)速度更快习勤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踪栋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子姻报,更是在濱河造成了極大的恐慌己英,老刑警劉巖间螟,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吴旋,死亡現(xiàn)場(chǎng)離奇詭異损肛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)荣瑟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)治拿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人笆焰,你說(shuō)我怎么就攤上這事劫谅。” “怎么了嚷掠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵捏检,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我不皆,道長(zhǎng)贯城,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任霹娄,我火速辦了婚禮能犯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犬耻。我一直安慰自己踩晶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布枕磁。 她就那樣靜靜地躺著渡蜻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪计济。 梳的紋絲不亂的頭發(fā)上晴楔,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音峭咒,去河邊找鬼税弃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛凑队,可吹牛的內(nèi)容都是我干的则果。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼漩氨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼西壮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起叫惊,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤款青,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后霍狰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抡草,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饰及,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了康震。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燎含。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腿短,靈堂內(nèi)的尸體忽然破棺而出屏箍,到底是詐尸還是另有隱情,我是刑警寧澤橘忱,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布赴魁,位于F島的核電站,受9級(jí)特大地震影響钝诚,放射性物質(zhì)發(fā)生泄漏尚粘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一敲长、第九天 我趴在偏房一處隱蔽的房頂上張望郎嫁。 院中可真熱鬧,春花似錦祈噪、人聲如沸泽铛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盔腔。三九已至,卻和暖如春月褥,著一層夾襖步出監(jiān)牢的瞬間弛随,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工宁赤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舀透,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓决左,卻偏偏與公主長(zhǎng)得像愕够,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子佛猛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容