深入討論阻塞與非阻塞、同步與異步的區(qū)別

一狈究、概念

異步:某個(gè)事情需要10s完成盏求。而我只需要調(diào)用某個(gè)函數(shù)告訴xxx來(lái)幫我做(然后我再干其他的事情)

同步:某個(gè)事情需要10s完成,我需要一直等它完成(等10s)磅废,再能繼續(xù)后面的工作荆烈。

阻塞:做某件事情,直到完成憔购,除非超時(shí)

非阻塞:嘗試做,如果不能做导绷,就不做(直接返回)屎飘,如果能做,就做钦购。

前兩者和后兩者不容易區(qū)分,不過(guò)前兩者更多的有涉及到多線程交互(消息)的場(chǎng)景葵萎。

二怨规、舉個(gè)例子

小李喝了想喝水,于是去煮開(kāi)水波丰。

1、小李把水壺放到爐子上爽蝴,等待水燒開(kāi)。(同步阻塞)

小李感覺(jué)這樣太費(fèi)時(shí)間蝎亚。

2、小李把水壺放到爐子上躺彬,去客廳看電視梅惯,時(shí)不時(shí)去廚房看看水開(kāi)沒(méi)有。(同步非阻塞)

小李還是覺(jué)得自己這樣太累铣减,于是買(mǎi)了把會(huì)響笛的那種水壺。水開(kāi)之后缔刹,能發(fā)出聲音劣针。

3、小李把響水壺放到爐子上灭翔,等待水壺發(fā)出聲音辣苏。(異步阻塞)

覺(jué)得這樣傻等意義不大

5、小李把響水壺放到爐子上稀蟋,去客廳看電視,水壺響之前不再去看它了骏融,響了再去拿壺萌狂。(異步非阻塞)

這樣真好。

三茫藏、深入理解

阻塞就是 recv/read的時(shí)候 socket接收緩沖區(qū)要是有數(shù)據(jù)就讀, 沒(méi)數(shù)據(jù)我就一直睡覺(jué)賴(lài)著不走凉当,直到有數(shù)據(jù)來(lái)了讀完我才走。send/write的時(shí)候看杭,要是發(fā)送緩沖區(qū)滿了,沒(méi)有空間繼續(xù)發(fā)送了我也一直睡覺(jué)賴(lài)著不走模孩,直到發(fā)送緩沖區(qū)騰出足夠的空間讓我把數(shù)據(jù)全部塞到發(fā)送緩沖區(qū)里我才走贮缅。(當(dāng)然如果你通過(guò)setsockopt設(shè)置了讀寫(xiě)超時(shí),超時(shí)時(shí)間到了還是會(huì)返回-1和EAGAIN,不再睡覺(jué)等待)

非阻塞就是recv/read的時(shí)候筷笨,要是接收緩沖區(qū)有數(shù)據(jù)我就讀完,沒(méi)有數(shù)據(jù)我直接帶著返回的-1和EGAIN走人轴或,絕不睡覺(jué)等待耽誤時(shí)間仰禀。write/send的時(shí)候, 要是發(fā)送緩沖區(qū)有足夠的空間答恶,就立刻把數(shù)據(jù)塞到發(fā)送緩沖區(qū)去,然后走人污呼,如果發(fā)送緩存區(qū)滿了包竹,空間不足,那直接帶著返回的-1和EAGAIN走人苗缩。

至于IO多路復(fù)用声诸,首先要理解的是,操作系統(tǒng)為你提供了一個(gè)功能彼乌,當(dāng)你的某個(gè)socket接收緩存區(qū)有數(shù)據(jù)可讀得问,或者發(fā)送緩沖區(qū)有空間可寫(xiě)的時(shí)候软免,它可以給你一個(gè)通知。這樣當(dāng)配合非阻塞的socket使用時(shí)漓骚,只有當(dāng)系統(tǒng)通知我哪個(gè)描述符可讀了榛泛,我才去執(zhí)行read操作,可以保證每次read都能讀到有效數(shù)據(jù)而不做純返回-1和EAGAIN的無(wú)用功孤个。寫(xiě)操作類(lèi)似沛简。操作系統(tǒng)的這個(gè)功能通過(guò)select/poll/epoll之類(lèi)的系統(tǒng)調(diào)用函數(shù)來(lái)使用,這些函數(shù)都可以同時(shí)監(jiān)視多個(gè)描述符的讀寫(xiě)就緒狀況椒楣,這樣,多個(gè)描述符的I/O操作都能在一個(gè)線程內(nèi)完成淆九,這就叫I/O多路復(fù)用毛俏,這里的“復(fù)用”指的是復(fù)用同一個(gè)線程。

至于事件驅(qū)動(dòng)煌寇,其實(shí)是I/O多路復(fù)用的一個(gè)另外的稱(chēng)呼唧席。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市迹卢,隨后出現(xiàn)的幾起案子徒仓,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喂走,死亡現(xiàn)場(chǎng)離奇詭異谋作,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)帖池,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)吭净,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人囚巴,你說(shuō)我怎么就攤上這事友扰。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵实愚,是天一觀的道長(zhǎng)兔辅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)维苔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任没宾,我火速辦了婚禮沸柔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘会钝。我一直安慰自己工三,他們只是感情好先鱼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布奸鬓。 她就那樣靜靜地躺著,像睡著了一般闹蒜。 火紅的嫁衣襯著肌膚如雪抑淫。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天砌烁,我揣著相機(jī)與錄音催式,去河邊找鬼。 笑死荣月,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捐下。 我是一名探鬼主播萌业,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婴程!你這毒婦竟也來(lái)了抱婉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蹲蒲,失蹤者是張志新(化名)和其女友劉穎侵贵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宴胧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年恕齐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞬逊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡士骤,死狀恐怖蕾域,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旨巷,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布若锁,位于F島的核電站斧吐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏口予。R本人自食惡果不足惜涕侈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一煤辨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧端三,春花似錦、人聲如沸郊闯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)欢摄。三九已至熬丧,卻和暖如春怀挠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闷畸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工躬它, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倘待。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓组贺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親啊奄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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