IO中同步第煮、異步與阻塞杜秸、非阻塞的區(qū)別

關(guān)鍵字:同步(synchronous), 異步(asynchronous), 阻塞(blocking), 非阻塞(non-blocking)放仗。

最近做了不少網(wǎng)頁(yè)端AJAX請(qǐng)求與Android客戶端多線程異步請(qǐng)求的工作,因項(xiàng)目周期緊撬碟,并未花太多的時(shí)間深入學(xué)習(xí)诞挨。這段時(shí)間通過(guò)查詢資料,對(duì)這一部分的原理好好地吸收一下小作。對(duì)于IO而言亭姥,大體分為兩類四個(gè):同步/異步; 阻塞/非阻塞。那么這四個(gè)詞到底作何解釋顾稀?很多時(shí)候我們會(huì)看見(jiàn)這些詞出現(xiàn)在文章中,而且同步-阻塞坝撑、異步-非阻塞很容易被別人混淆静秆。

同步:發(fā)出一個(gè)功能調(diào)用時(shí),在沒(méi)有得到結(jié)果之前巡李,該調(diào)用就不返回抚笔。

異步:當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者不能立刻得到結(jié)果侨拦。實(shí)際處理這個(gè)調(diào)用的部件在完成后殊橙,通過(guò)狀態(tài)、通知和回調(diào)通知調(diào)用者狱从。AJAX請(qǐng)求膨蛮,就是典型的異步請(qǐng)求應(yīng)用。

阻塞:阻塞調(diào)用是指調(diào)用結(jié)果返回之前季研,當(dāng)前線程會(huì)被掛起敞葛,函數(shù)只有在得到結(jié)果之后才會(huì)返回。

非阻塞:指在不能立即得到結(jié)果之前与涡,該函數(shù)不會(huì)阻塞當(dāng)前線程惹谐,而立刻返回。

驼卖,左圖所示氨肌,為典型的

同步阻塞I/O模型

,當(dāng)系統(tǒng)調(diào)用read函數(shù)時(shí)酌畜,首先阻塞并對(duì)內(nèi)核進(jìn)行上下文切換怎囚,然后觸發(fā)讀操作,當(dāng)讀取完畢并響應(yīng)返回(read response)檩奠,數(shù)據(jù)就被移動(dòng)到用戶空間的緩沖區(qū)中桩了,然后應(yīng)用程序會(huì)解除阻塞附帽。

同步非阻塞IO,如下圖所示井誉,非阻塞的實(shí)現(xiàn)是I/O命令可能并不會(huì)立即滿足蕉扮,需要應(yīng)用程序調(diào)用許多次來(lái)等待操作完成,這種方式可能導(dǎo)到系統(tǒng)的整體I/O吞吐量不高颗圣,下圖中喳钟,系統(tǒng)在執(zhí)行read函數(shù)時(shí),期間進(jìn)行了多次忙碌等待在岂,直到數(shù)據(jù)整體讀取完畢為止奔则。因?yàn)檫@里面沒(méi)有通知機(jī)制,因此調(diào)用整體需要read函數(shù)完成蔽午,因此稱為同步易茬。

異步阻塞IO, 上面提過(guò),異步IO的核心是通知機(jī)制及老,下圖是帶有阻塞通知的非阻塞 I/O抽莱。在這種模型中,配置的是非阻塞I/O骄恶,然后使用阻塞select系統(tǒng)調(diào)用來(lái)確定一個(gè)I/O描述符何時(shí)有操作食铐。使 select 調(diào)用非常有趣的是它可以用來(lái)為多個(gè)描述符提供通知,而不僅僅為一個(gè)描述符提供通知僧鲁。對(duì)于每個(gè)提示符來(lái)說(shuō)虐呻,我們可以請(qǐng)求這個(gè)描述符可以寫數(shù)據(jù)、有讀數(shù)據(jù)可用以及是否發(fā)生錯(cuò)誤的通知寞秃。(雖然異步執(zhí)行斟叼,但仍然會(huì)發(fā)生阻塞,等待通知蜕该,自己執(zhí)行)

異步非阻塞IO,最后犁柜,異步非阻塞I/O 模型是一種處理與 I/O 重疊進(jìn)行的模。讀請(qǐng)求會(huì)立即返回堂淡,說(shuō)明read請(qǐng)求已經(jīng)成功發(fā)起了馋缅。在后臺(tái)完成讀操作時(shí),應(yīng)用程序然后會(huì)執(zhí)行其他處理操作绢淀。當(dāng)read的響應(yīng)到達(dá)時(shí)萤悴,就會(huì)產(chǎn)生一個(gè)信號(hào)或執(zhí)行一個(gè)基于線程的回調(diào)函數(shù)來(lái)完成這次I/O處理過(guò)程。(read請(qǐng)求為非阻塞的皆的,但異步通知方式上采用了回調(diào)函數(shù)機(jī)制覆履,無(wú)需應(yīng)用程序再去處理)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子硝全,更是在濱河造成了極大的恐慌栖雾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伟众,死亡現(xiàn)場(chǎng)離奇詭異析藕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凳厢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門账胧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人先紫,你說(shuō)我怎么就攤上這事治泥。” “怎么了遮精?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵居夹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我仑鸥,道長(zhǎng)吮播,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任眼俊,我火速辦了婚禮,結(jié)果婚禮上粟关,老公的妹妹穿的比我還像新娘疮胖。我一直安慰自己,他們只是感情好闷板,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布澎灸。 她就那樣靜靜地躺著,像睡著了一般遮晚。 火紅的嫁衣襯著肌膚如雪性昭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天县遣,我揣著相機(jī)與錄音糜颠,去河邊找鬼。 笑死萧求,一個(gè)胖子當(dāng)著我的面吹牛其兴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夸政,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼元旬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起匀归,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坑资,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后穆端,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袱贮,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年徙赢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了字柠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狡赐,死狀恐怖窑业,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枕屉,我是刑警寧澤常柄,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站搀擂,受9級(jí)特大地震影響西潘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哨颂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一喷市、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧威恼,春花似錦品姓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至斤蔓,卻和暖如春植酥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弦牡。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工友驮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喇伯。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓喊儡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稻据。 傳聞我的和親對(duì)象是個(gè)殘疾皇子艾猜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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