1. 異步處理和多線(xiàn)程

什么是異步:

異步是當(dāng)一個(gè)調(diào)用請(qǐng)求發(fā)送給被調(diào)用者,而調(diào)用者不用等待其結(jié)果的返回.實(shí)現(xiàn)異步可以采用多線(xiàn)程技術(shù)或則交給另外的進(jìn)程來(lái)處理司光。異步和同步是相對(duì)的,同步就是順序執(zhí)行,執(zhí)行完一個(gè)再執(zhí)行下一個(gè),需要等待栅组、協(xié)調(diào)運(yùn)行。異步就是彼此獨(dú)立,在等待某事件的過(guò)程中繼續(xù)做自己的事枢析,不需要等待這一事件完成后再工作玉掸。線(xiàn)程就是實(shí)現(xiàn)異步的一個(gè)方式。異步是讓調(diào)用方法的主線(xiàn)程不需要同步等待另一線(xiàn)程的完成醒叁,從而可以讓主線(xiàn)程干其它的事情司浪。

1. 異步是目的,而多線(xiàn)程是實(shí)現(xiàn)這個(gè)目的的方法把沼。

????異步是說(shuō)啊易,A發(fā)起一個(gè)操作后(一般都是比較耗時(shí)的操作,如果不耗時(shí)的操作就沒(méi)有必要異步了)饮睬,可以繼續(xù)自顧自的處理它自己的事兒认罩,不用等待這個(gè)耗時(shí)操作返回。

2. 隨著隨著擁有多個(gè)硬線(xiàn)程CPU(超線(xiàn)程续捂、雙核)的普及,多線(xiàn)程和異步操作等并發(fā)程序設(shè)計(jì)方法也受到了更多的關(guān)注和討論宦搬。本文主要是想探討一下如何使用并發(fā)來(lái)最大化程序的性能牙瓢。

多線(xiàn)程和異步操作的異同:

多線(xiàn)程和異步操作兩者都可以達(dá)到避免調(diào)用線(xiàn)程阻塞的目的,從而提高軟件的可響應(yīng)性间校。甚至有些時(shí)候我們就認(rèn)為多線(xiàn)程和異步操作是等同的概念矾克。但是,多線(xiàn)程和異步操作還是有一些區(qū)別的憔足。而這些區(qū)別造成了使用多線(xiàn)程和異步操作的時(shí)機(jī)的區(qū)別胁附。

異步操作的本質(zhì):

所有的程序最終都會(huì)由計(jì)算機(jī)硬件來(lái)執(zhí)行酒繁,所以為了更好的理解異步操作的本質(zhì),我們有必要了解一下它的硬件基礎(chǔ)控妻。 熟悉電腦硬件的朋友肯定對(duì)DMA這個(gè)詞不陌生州袒,硬盤(pán)、光驅(qū)的技術(shù)規(guī)格中都有明確DMA的模式指標(biāo)弓候,其實(shí)網(wǎng)卡郎哭、聲卡、顯卡也是有DMA功能的菇存。DMA就是直 接內(nèi)存訪(fǎng)問(wèn)的意思夸研,也就是說(shuō),擁有DMA功能的硬件在和內(nèi)存進(jìn)行數(shù)據(jù)交換的時(shí)候可以不消耗CPU資源依鸥。只要CPU在發(fā)起數(shù)據(jù)傳輸時(shí)發(fā)送一個(gè)指令亥至,硬件就開(kāi) 始自己和內(nèi)存交換數(shù)據(jù),在傳輸完成之后硬件會(huì)觸發(fā)一個(gè)中斷來(lái)通知操作完成贱迟。這些無(wú)須消耗CPU時(shí)間的I/O操作正是異步操作的硬件基礎(chǔ)姐扮。所以即使在DOS 這樣的單進(jìn)程(而且無(wú)線(xiàn)程概念)系統(tǒng)中也同樣可以發(fā)起異步的DMA操作。

異步操作的優(yōu)缺點(diǎn):

1. 優(yōu)點(diǎn):無(wú)需額外的線(xiàn)程負(fù)擔(dān)关筒,使用回調(diào)的方式進(jìn)行處理

2. 優(yōu)點(diǎn):在設(shè)計(jì)良好的情況下溶握,處理函數(shù)可以不必使用共享變量,減少了死鎖的可能性

3. 缺點(diǎn):編寫(xiě)異步操作的復(fù)雜度較高蒸播,程序主要通過(guò)回調(diào)方式進(jìn)行處理睡榆。

4. 缺點(diǎn):與普通思維方式有出入,難于調(diào)試袍榆。

因?yàn)楫惒讲僮鳠o(wú)須額外的線(xiàn)程負(fù)擔(dān)胀屿,并且使用回調(diào)的方式進(jìn)行處理,在設(shè)計(jì)良好的情況下包雀,處理函數(shù)可以不必使用共享變量(即使無(wú)法完全不用宿崭,最起碼可以減少 共享變量的數(shù)量),減少了死鎖的可能才写。當(dāng)然異步操作也并非完美無(wú)暇葡兑。編寫(xiě)異步操作的復(fù)雜程度較高,程序主要使用回調(diào)方式進(jìn)行處理赞草,與普通人的思維方式有些 初入讹堤,而且難以調(diào)試。

線(xiàn)程的本質(zhì):

線(xiàn)程不是一個(gè)計(jì)算機(jī)硬件的功能厨疙,而是操作系統(tǒng)提供的一種邏輯功能洲守,線(xiàn)程本質(zhì)上是進(jìn)程中一段并發(fā)運(yùn)行的代碼,所以線(xiàn)程需要操作系統(tǒng)投入CPU資源來(lái)運(yùn)行和調(diào)度。

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

1. 優(yōu)點(diǎn):順序執(zhí)行梗醇,符合普通人的思維習(xí)慣

2. 缺點(diǎn):線(xiàn)程的濫用會(huì)給系統(tǒng)帶來(lái)上下文切換的額外負(fù)擔(dān)知允。

3. 缺點(diǎn):線(xiàn)程間共享變量可能造成死鎖的出現(xiàn)。

適用范圍:

????????在了解了線(xiàn)程與異步操作各自的優(yōu)缺點(diǎn)之后叙谨,我們可以來(lái)探討一下線(xiàn)程和異步的合理用途温鸽。我認(rèn)為:當(dāng)需要執(zhí)行I/O操作時(shí),使用異步操作比使用線(xiàn)程+同步 I/O操作更合適唉俗。I/O操作不僅包括了直接的文件嗤朴、網(wǎng)絡(luò)的讀寫(xiě),還包括數(shù)據(jù)庫(kù)操作虫溜、Web Service雹姊、HttpRequest以及.net Remoting等跨進(jìn)程的調(diào)用。

  而線(xiàn)程的適用范圍則是那種需要長(zhǎng)時(shí)間CPU運(yùn)算的場(chǎng)合衡楞,例如耗時(shí)較長(zhǎng)的圖形處理和算法執(zhí)行吱雏。但是往 往由于使用線(xiàn)程編程的簡(jiǎn)單和符合習(xí)慣,所以很多朋友往往會(huì)使用線(xiàn)程來(lái)執(zhí)行耗時(shí)較長(zhǎng)的I/O操作瘾境。這樣在只有少數(shù)幾個(gè)并發(fā)操作的時(shí)候還無(wú)傷大雅歧杏,如果需要處 理大量的并發(fā)操作時(shí)就不合適了。



一些需要說(shuō)明的點(diǎn):

異步執(zhí)行也得執(zhí)行迷守,不在當(dāng)前線(xiàn)程執(zhí)行犬绒,當(dāng)然得去另外一個(gè)線(xiàn)程執(zhí)行。異步通常用系統(tǒng)線(xiàn)程池的線(xiàn)程兑凿,通常情況下性能好些凯力。(因?yàn)榭梢远啻卫茫暾?qǐng)時(shí)不需要重新申請(qǐng)一個(gè)線(xiàn)程礼华,只需要從池里取就行了咐鹤。)異步是一種效果,多線(xiàn)程是一種具體技術(shù)圣絮。可以說(shuō)祈惶,用“多線(xiàn)程”實(shí)現(xiàn)“異步”。

異步和多線(xiàn)程是兩個(gè)不同的概念扮匠,不能這樣比較.異步請(qǐng)求一般用在IO等耗時(shí)操作上捧请,他的好處是函數(shù)調(diào)用立即返回,相應(yīng)的工作線(xiàn)程立即返還給系統(tǒng)以供重用棒搜。由于系統(tǒng)的線(xiàn)程資源是非常寶貴的血久,通常有一定的數(shù)目限制,如.net默認(rèn)是25帮非。若使用異步方式,用這些固定數(shù)目的線(xiàn)程在固定的時(shí)間內(nèi)就可以服務(wù)更多的請(qǐng)求,而如果用同步方式末盔,那么每個(gè)請(qǐng)求都自始至終占用這一個(gè)線(xiàn)程筑舅,服務(wù)器可以同時(shí)服務(wù)的請(qǐng)求數(shù)就少了。當(dāng)異步操作執(zhí)行完成后陨舱,系統(tǒng)會(huì)從可用線(xiàn)程中選取一個(gè)執(zhí)行回調(diào)程序翠拣,這時(shí)的這個(gè)線(xiàn)程可能是剛開(kāi)始發(fā)出請(qǐng)求的那個(gè)線(xiàn)程,也可能是其他的線(xiàn)程游盲,因?yàn)橄到y(tǒng)選取線(xiàn)程是隨機(jī)的事情误墓,所以不能說(shuō)絕對(duì)不是剛開(kāi)始的那個(gè)線(xiàn)程。多線(xiàn)程是用來(lái)并發(fā)的執(zhí)行多個(gè)任務(wù)益缎。

異步有時(shí)優(yōu)先級(jí)比主線(xiàn)程還高谜慌。這個(gè)特點(diǎn)和多線(xiàn)程不同。

線(xiàn)程池的實(shí)現(xiàn)方法與線(xiàn)程是不一樣的.初始化時(shí)在線(xiàn)程池里的線(xiàn)程為0.當(dāng)進(jìn)程需要一個(gè)線(xiàn)程時(shí),創(chuàng)建一個(gè)線(xiàn)程,由此線(xiàn)程執(zhí)行用戶(hù)的方法.需要注意的是,此線(xiàn)程執(zhí)行完后并不立即銷(xiāo)毀,而是掛起等待,如果有其他方法需要執(zhí)行,回喚醒進(jìn)行處理.只有當(dāng)它等到40秒(沒(méi)有官方記錄,有可能是其它數(shù)字)還沒(méi)有任務(wù)執(zhí)行時(shí)才喚醒自己,并銷(xiāo)毀自己,釋放資源.當(dāng)然,如果線(xiàn)程池中的線(xiàn)程不夠處理任務(wù)時(shí),會(huì)再次創(chuàng)建一個(gè)新線(xiàn)程進(jìn)行執(zhí)行.


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末莺奔,一起剝皮案震驚了整個(gè)濱河市欣范,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌令哟,老刑警劉巖恼琼,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屏富,居然都是意外死亡晴竞,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)狠半,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)噩死,“玉大人,你說(shuō)我怎么就攤上這事典予√鸨酰” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瘤袖,是天一觀的道長(zhǎng)衣摩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捂敌,這世上最難降的妖魔是什么艾扮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮占婉,結(jié)果婚禮上泡嘴,老公的妹妹穿的比我還像新娘。我一直安慰自己逆济,他們只是感情好酌予,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布磺箕。 她就那樣靜靜地躺著,像睡著了一般抛虫。 火紅的嫁衣襯著肌膚如雪松靡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天建椰,我揣著相機(jī)與錄音雕欺,去河邊找鬼。 笑死棉姐,一個(gè)胖子當(dāng)著我的面吹牛屠列,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伞矩,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼笛洛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了扭吁?” 一聲冷哼從身側(cè)響起撞蜂,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侥袜,沒(méi)想到半個(gè)月后蝌诡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枫吧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年浦旱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片九杂。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颁湖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出例隆,到底是詐尸還是另有隱情甥捺,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布镀层,位于F島的核電站镰禾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏唱逢。R本人自食惡果不足惜吴侦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坞古。 院中可真熱鬧备韧,春花似錦、人聲如沸痪枫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至捧挺,卻和暖如春虑绵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闽烙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留声搁,地道東北人黑竞。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疏旨,于是被迫代替她去往敵國(guó)和親很魂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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