并發(fā)和并行,異步與多線程區(qū)別

轉(zhuǎn)載自http://blog.csdn.net/woliuyunyicai/article/details/45165869

1挫剑、并發(fā)和并行的區(qū)別

可由上圖形象指出兩者的區(qū)別:

1)定義:

并發(fā):在操作系統(tǒng)中或悲,是指一個(gè)時(shí)間段中有幾個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間,且這幾個(gè)程序都是在同一個(gè)處理機(jī)上運(yùn)行怪与,但任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)上運(yùn)行夺刑。

并行:在操作系統(tǒng)中,一組程序按獨(dú)立異步的速度執(zhí)行,無(wú)論從微觀還是宏觀遍愿,程序都是一起執(zhí)行的存淫。

來(lái)個(gè)比喻:并發(fā)和并行的區(qū)別就是一個(gè)人同時(shí)吃三個(gè)饅頭和三個(gè)人同時(shí)吃三個(gè)饅頭;

在單CPU系統(tǒng)中沼填,系統(tǒng)調(diào)度在某一時(shí)刻只能讓一個(gè)線程運(yùn)行纫雁,雖然這種調(diào)試機(jī)制有多種形式(大多數(shù)是時(shí)間片輪巡為主),但無(wú)論如何倾哺,要通過(guò)不斷切換需要運(yùn)行的線程讓其運(yùn)行的方式就叫并發(fā)(concurrent)轧邪。而在多CPU系統(tǒng)中,可以讓兩個(gè)以上的線程同時(shí)運(yùn)行羞海,這種可以同時(shí)讓兩個(gè)以上線程同時(shí)運(yùn)行的方式叫做并行(parallel)忌愚。

2)并發(fā)通常指提高運(yùn)行在單處理器上的程序的性能;

并發(fā)是有狀態(tài)的却邓,“具有可論證的確定性硕糊,但是實(shí)際上具有不可確定性”;

"并發(fā)"在微觀上不是同時(shí)執(zhí)行的腊徙,只是把時(shí)間分成若干段简十,使多個(gè)進(jìn)程快速交替的執(zhí)行,從宏觀外來(lái)看撬腾,好像是這些進(jìn)程都在執(zhí)行螟蝙。

使用多個(gè)線程可以幫助我們?cè)趩蝹€(gè)處理系統(tǒng)中實(shí)現(xiàn)更高的吞吐量,如果一個(gè)程序是單線程的民傻,這個(gè)處理器在等待一個(gè)同步I/O操作完成的時(shí)候胰默,他仍然是空閑的。在多線程系統(tǒng)中漓踢,當(dāng)一個(gè)線程等待I/O的同時(shí)牵署,其他的線程也可以執(zhí)行。

二喧半、異步與多線程

1)基本概念

1. 并發(fā):在操作系統(tǒng)中奴迅,是指一個(gè)時(shí)間段中有幾個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間,且這幾個(gè)程序都是在同一個(gè)處理機(jī)上運(yùn)行挺据。其中兩種并發(fā)關(guān)系分別是同步和互斥

2. 互斥:進(jìn)程間相互排斥的使用臨界資源的現(xiàn)象取具,就叫互斥。

? ? 3. 同步:進(jìn)程之間的關(guān)系不是相互排斥臨界資源的關(guān)系吴菠,而是相互依賴的關(guān)系者填。進(jìn)一步的說(shuō)明:就是前一個(gè)進(jìn)程的輸出作為后一個(gè)進(jìn)程的輸入,當(dāng)?shù)谝粋€(gè)進(jìn)程沒(méi)有輸出時(shí)第二個(gè)進(jìn)程必須等待做葵。具有同步關(guān)系的一組并發(fā)進(jìn)程相互發(fā)送的信息稱為消息或事件占哟。

其中并發(fā)又有偽并發(fā)和真并發(fā),偽并發(fā)是指單核處理器的并發(fā),真并發(fā)是指多核處理器的并發(fā)榨乎。

? ? 4. 并行:在單處理器中多道程序設(shè)計(jì)系統(tǒng)中怎燥,進(jìn)程被交替執(zhí)行,表現(xiàn)出一種并發(fā)的外部特種蜜暑;在多處理器系統(tǒng)中铐姚,進(jìn)程不僅可以交替執(zhí)行,而且可以重疊執(zhí)行肛捍。在多處理器上的程序才可實(shí)現(xiàn)并行處理隐绵。從而可知,并行是針對(duì)多處理器而言的拙毫。并行是同時(shí)發(fā)生的多個(gè)并發(fā)事件依许,具有并發(fā)的含義,但并發(fā)不一定并行缀蹄,也亦是說(shuō)并發(fā)事件之間不一定要同一時(shí)刻發(fā)生峭跳。

? ? 5. 多線程:多線程是程序設(shè)計(jì)的邏輯層概念,它是進(jìn)程中并發(fā)運(yùn)行的一段代碼缺前。多線程可以實(shí)現(xiàn)線程間的切換執(zhí)行蛀醉。

? ? 6. 異步:異步和同步是相對(duì)的,同步就是順序執(zhí)行衅码,執(zhí)行完一個(gè)再執(zhí)行下一個(gè)拯刁,需要等待、協(xié)調(diào)運(yùn)行肆良。異步就是彼此獨(dú)立,在等待某事件的過(guò)程中繼續(xù)做自己的事筛璧,不需要等待這一事件完成后再工作逸绎。線程就是實(shí)現(xiàn)異步的一個(gè)方式惹恃。異步是讓調(diào)用方法的主線程不需要同步等待另一線程的完成,從而可以讓主線程干其它的事情棺牧。

異步和多線程并不是一個(gè)同等關(guān)系,異步是最終目的,多線程只是我們實(shí)現(xiàn)異步的一種手段巫糙。異步是當(dāng)一個(gè)調(diào)用請(qǐng)求發(fā)送給被調(diào)用者,而調(diào)用者不用等待其結(jié)果的返回而可以做其它的事情。實(shí)現(xiàn)異步可以采用多線程技術(shù)或則交給另外的進(jìn)程來(lái)處理颊乘。

? ??異步和同步的區(qū)別参淹,??在io等待的時(shí)候,同步不會(huì)切走乏悄,浪費(fèi)了時(shí)間浙值。

? ??多線程的好處,比較容易的實(shí)現(xiàn)了 異步切換的思想檩小, 因?yàn)楫惒降某绦蚝茈y寫的开呐。多線程本身程還是以同步完成,但是應(yīng)該說(shuō)比效率是比不上異步的。 而且多線很容易寫筐付, 相對(duì)效率也高卵惦。

2)深層次理解

多線程和異步操作的異同

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

異步操作的本質(zhì)

  所有的程序最終都會(huì)由計(jì)算機(jī)硬件來(lái)執(zhí)行,所以為了更好的理解異步操作的本質(zhì)印衔,我們有必要了解一下它的硬件基礎(chǔ)庸疾。 熟悉電腦硬件的朋友肯定對(duì)DMA這個(gè)詞不陌生,硬盤当编、光驅(qū)的技術(shù)規(guī)格中都有明確DMA的模式指標(biāo)届慈,其實(shí)網(wǎng)卡、聲卡忿偷、顯卡也是有DMA功能的金顿。DMA就是直接內(nèi)存訪問(wèn)的意思,也就是說(shuō)鲤桥,擁有DMA功能的硬件在和內(nèi)存進(jìn)行數(shù)據(jù)交換的時(shí)候可以不消耗CPU資源揍拆。只要CPU在發(fā)起數(shù)據(jù)傳輸時(shí)發(fā)送一個(gè)指令,硬件就開始自己和內(nèi)存交換數(shù)據(jù)茶凳,在傳輸完成之后硬件會(huì)觸發(fā)一個(gè)中斷來(lái)通知操作完成嫂拴。這些無(wú)須消耗CPU時(shí)間的I/O操作正是異步操作的硬件基礎(chǔ)。所以即使在DOS這樣的單進(jìn)程(而且無(wú)線程概念)系統(tǒng)中也同樣可以發(fā)起異步的DMA操作贮喧。

線程的本質(zhì)

線程不是一個(gè)計(jì)算機(jī)硬件的功能筒狠,而是

操作系統(tǒng)提供的一種邏輯功能,線程本質(zhì)上是進(jìn)程中一段并發(fā)運(yùn)行的代碼箱沦,所以線程需要操作系統(tǒng)投入CPU資源來(lái)運(yùn)行和調(diào)度辩恼。

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

  因?yàn)楫惒讲僮鳠o(wú)須額外的線程負(fù)擔(dān)疮跑,并且使用回調(diào)的方式進(jìn)行處理融蹂,在設(shè)計(jì)良好的情況下,處理函數(shù)可以不必使用共享變量(即使無(wú)法完全不用肚逸,最起碼可以減少共享變量的數(shù)量)寒跳,減少了死鎖的可能聘萨。當(dāng)然異步操作也并非完美無(wú)暇。編寫異步操作的復(fù)雜程度較高童太,程序主要使用回調(diào)方式進(jìn)行處理米辐,與普通人的思維方式有些初入碾牌,而且難以調(diào)試。

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

多線程的優(yōu)點(diǎn)很明顯儡循,線程中的處理程序依然是順序執(zhí)行舶吗,符合普通人的思維習(xí)慣,所以編程簡(jiǎn)單择膝。但是多線程的缺點(diǎn)也同樣明顯誓琼,線程的使用(濫用)會(huì)給系統(tǒng)帶來(lái)

上下文切換的額外負(fù)擔(dān)。并且線程間的共享變量可能造成死鎖的出現(xiàn)肴捉。

適用范圍

  在了解了線程與異步操作各自的優(yōu)缺點(diǎn)之后腹侣,我們可以來(lái)探討一下線程和異步的合理用途。我認(rèn)為:當(dāng)需要執(zhí)行I/O操作時(shí)齿穗,使用異步操作比使用線程+同步I/O操作更合適傲隶。I/O操作不僅包括了直接的文件、網(wǎng)絡(luò)的讀寫窃页,還包括數(shù)據(jù)庫(kù)操作跺株、Web Service、HttpRequest以及.Net Remoting等跨進(jìn)程的調(diào)用脖卖。

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛆封,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勾栗,更是在濱河造成了極大的恐慌惨篱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件械姻,死亡現(xiàn)場(chǎng)離奇詭異妒蛇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)楷拳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吏奸,“玉大人欢揖,你說(shuō)我怎么就攤上這事》芪担” “怎么了她混?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵烈钞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坤按,道長(zhǎng)毯欣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任臭脓,我火速辦了婚禮酗钞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘来累。我一直安慰自己砚作,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布嘹锁。 她就那樣靜靜地躺著葫录,像睡著了一般。 火紅的嫁衣襯著肌膚如雪领猾。 梳的紋絲不亂的頭發(fā)上米同,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音摔竿,去河邊找鬼窍霞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拯坟,可吹牛的內(nèi)容都是我干的但金。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼郁季,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冷溃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梦裂,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤似枕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后年柠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凿歼,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年冗恨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了答憔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掀抹,死狀恐怖虐拓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情傲武,我是刑警寧澤蓉驹,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布城榛,位于F島的核電站,受9級(jí)特大地震影響态兴,放射性物質(zhì)發(fā)生泄漏狠持。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一瞻润、第九天 我趴在偏房一處隱蔽的房頂上張望喘垂。 院中可真熱鬧,春花似錦敢订、人聲如沸王污。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昭齐。三九已至,卻和暖如春矾柜,著一層夾襖步出監(jiān)牢的瞬間阱驾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工怪蔑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留里覆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓缆瓣,卻偏偏與公主長(zhǎng)得像喧枷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弓坞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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