同步 異步 阻塞 非阻塞

另外看這篇 http://www.cnblogs.com/dolphin0520/p/3916526.html

JAVA NIO是同步非阻塞io。同步和異步說的是消息的通知機制媒至,阻塞非阻塞說的是線程的狀態(tài) 。
下面說說我的理解峦睡,client和服務器建立了socket連接:
1翎苫、同步阻塞io:client在調用read()方法時师脂,stream里沒有數(shù)據(jù)可讀乡数,線程停止向下執(zhí)行系奉,直至stream有數(shù)據(jù)。
阻塞:體現(xiàn)在這個線程不能干別的了惭嚣,只能在這里等著
同步:是體現(xiàn)在消息通知機制上的遵湖,即stream有沒有數(shù)據(jù)是需要我自己來判斷的悔政。
2晚吞、同步非阻塞io:調用read方法后,如果stream沒有數(shù)據(jù)谋国,方法就返回槽地,然后這個線程就就干別的去了。
非阻塞:體現(xiàn)在芦瘾,這個線程可以去干別的捌蚊,不需要一直在這等著
同步:體現(xiàn)在消息通知機制,這個線程仍然要定時的讀取stream近弟,判斷數(shù)據(jù)有沒有準備好缅糟,client采用循環(huán)的方式去讀取,可以看出CPU大部分被浪費了
3祷愉、異步非阻塞io:服務端調用read()方法窗宦,若stream中無數(shù)據(jù)則返回,程序繼續(xù)向下執(zhí)行二鳄。當stream中有數(shù)據(jù)時赴涵,操作系統(tǒng)會負責把數(shù)據(jù)拷貝到用戶空間,然后通知這個線程订讼,這里的消息通知機制就是異步髓窜!而不是像NIO那樣,自己起一個線程去監(jiān)控stream里面有沒有數(shù)據(jù)欺殿!

作者:蕓蕓有度
鏈接:https://www.zhihu.com/question/27991975/answer/56432635
來源:知乎
著作權歸作者所有寄纵,轉載請聯(lián)系作者獲得授權。

NIO 與傳統(tǒng)IO的測試脖苏,我也做過擂啥。兩者在普通文件的讀取時,速度幾乎沒有差異帆阳。 更有趣的是哺壶,如果傳統(tǒng)IO屋吨,使用的得當(比如使用BufferedInputStream、BufferedReader )山宾,是很快的至扰。如果NIO使用不當(比如,我用MappedByteBuffer资锰,將文件映射到內存敢课,Buffer的大小是文件的總長度43M),速度是傳統(tǒng)IO的二十分之一绷杜。 引用IBM官方教程中的一句話直秆,來解釋:
引用
在 JDK 1.4 中原來的 I/O 包和 NIO 已經(jīng)很好地集成了。 java.io. 已經(jīng)以 NIO 為基礎重新實現(xiàn)了鞭盟,所以現(xiàn)在它可以利用 NIO 的一些特性圾结。例如, java.io. 包中的一些類包含以塊的形式讀寫數(shù)據(jù)的方法齿诉,這使得即使在更面向流的系統(tǒng)中筝野,處理速度也會更快。**
可以看到粤剧,1.4后的IO經(jīng)過了集成歇竟。所以NIO的好處,集中在其他特性上抵恋,而非速度了: 1焕议、分散與聚集讀取 2、文件鎖定功能 3弧关、網(wǎng)絡異步IO

1盅安、前言
  在網(wǎng)絡編程中,阻塞梯醒、非阻塞宽堆、同步、異步經(jīng)常被提到茸习。unix網(wǎng)絡編程第一卷第六章專門討論五種不同的IO模型畜隶,Stevens講的非常詳細,我記得去年看第一遍時候号胚,似懂非懂籽慢,沒有深入理解。網(wǎng)上有詳細的分析:http://blog.csdn.net/historyasamirror/article/details/5778378猫胁。我結合網(wǎng)上博客和書總結一下箱亿,加以區(qū)別,加深理解弃秆。
2届惋、數(shù)據(jù)流向
  網(wǎng)絡IO操作實際過程涉及到內核和調用這個IO操作的進程髓帽。以read為例,read的具體操作分為以下兩個部分:
 ∧员(1)內核等待數(shù)據(jù)可讀
 ≈2亍(2)將內核讀到的數(shù)據(jù)拷貝到進程
詳細過程如下圖所示:


3、網(wǎng)絡IO模型詳細分析
  常見的IO模型有阻塞瘩欺、非阻塞必盖、IO多路復用,異步俱饿。以一個生動形象的例子來說明這四個概念歌粥。周末我和女友去逛街,中午餓了拍埠,我們準備去吃飯失驶。周末人多,吃飯需要排隊械拍,我和女友有以下幾種方案:
 ⊥挥隆(1)我和女友點完餐后装盯,不知道什么時候能做好坷虑,只好坐在餐廳里面等,直到做好埂奈,然后吃完才離開迄损。
女友本想還和我一起逛街的,但是不知道飯能什么時候做好账磺,只好和我一起在餐廳等芹敌,而不能去逛街,直到吃完飯才能去逛街垮抗,中間等待做飯的時間浪費掉了氏捞。這就是典型的阻塞。網(wǎng)絡中IO阻塞如下圖所示:

 ∶鞍妗(2)我女友不甘心白白在這等液茎,又想去逛商場,又擔心飯好了辞嗡。所以我們逛一會捆等,回來詢問服務員飯好了沒有,來來回回好多次续室,飯都還沒吃都快累死了啦栋烤。這就是非阻塞。需要不斷的詢問挺狰,是否準備好了明郭。網(wǎng)絡IO非阻塞如下圖所示:

 ÷蚩摺(3)與第二個方案差不多,餐廳安裝了電子屏幕用來顯示點餐的狀態(tài)薯定,這樣我和女友逛街一會蔑祟,回來就不用去詢問服務員了,直接看電子屏幕就可以了沉唠。這樣每個人的餐是否好了疆虚,都直接看電子屏幕就可以了,這就是典型的IO多路復用满葛,如select径簿、poll、epoll嘀韧。網(wǎng)絡IO具體模型如下圖所示:

 ∑ぁ(4)女友不想逛街,又餐廳太吵了锄贷,回家好好休息一下译蒂。于是我們叫外賣,打個電話點餐谊却,然后我和女友可以在家好好休息一下柔昼,飯好了送貨員送到家里來。這就是典型的異步炎辨,只需要打個電話說一下捕透,然后可以做自己的事情,飯好了就送來了碴萧。linux提供了AIO庫函數(shù)實現(xiàn)異步乙嘀,但是用的很少。目前有很多開源的異步IO庫破喻,例如libevent虎谢、libev、libuv曹质。異步過程如下圖所示:

4婴噩、同步與異步
  實際上同步與異步是針對應用程序與內核的交互而言的。同步過程中進程觸發(fā)IO操作并等待或者輪詢的去查看IO操作是否完成咆繁。異步過程中進程觸發(fā)IO操作以后讳推,直接返回,做自己的事情玩般,IO交給內核來處理银觅,完成后內核通知進程IO完成。同步與異步如下圖所示:

5坏为、阻塞與非阻塞
  簡單理解為需要做一件事能不能立即得到返回應答究驴,如果不能立即獲得返回镊绪,需要等待,那就阻塞了洒忧,否則就可以理解為非阻塞蝴韭。詳細區(qū)別如下圖所示:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熙侍,隨后出現(xiàn)的幾起案子榄鉴,更是在濱河造成了極大的恐慌,老刑警劉巖蛉抓,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庆尘,死亡現(xiàn)場離奇詭異,居然都是意外死亡巷送,警方通過查閱死者的電腦和手機驶忌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笑跛,“玉大人付魔,你說我怎么就攤上這事》甚澹” “怎么了几苍?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晤柄。 經(jīng)常有香客問我擦剑,道長妖胀,這世上最難降的妖魔是什么芥颈? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赚抡,結果婚禮上爬坑,老公的妹妹穿的比我還像新娘。我一直安慰自己涂臣,他們只是感情好盾计,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赁遗,像睡著了一般署辉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岩四,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天哭尝,我揣著相機與錄音,去河邊找鬼剖煌。 笑死材鹦,一個胖子當著我的面吹牛逝淹,可吹牛的內容都是我干的。 我是一名探鬼主播桶唐,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栅葡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尤泽?” 一聲冷哼從身側響起欣簇,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坯约,沒想到半個月后醉蚁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡鬼店,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年网棍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妇智。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡滥玷,死狀恐怖,靈堂內的尸體忽然破棺而出巍棱,到底是詐尸還是另有隱情惑畴,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布航徙,位于F島的核電站如贷,受9級特大地震影響,放射性物質發(fā)生泄漏到踏。R本人自食惡果不足惜杠袱,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窝稿。 院中可真熱鬧楣富,春花似錦、人聲如沸伴榔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踪少。三九已至塘安,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間援奢,已是汗流浹背兼犯。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人免都。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓锉罐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绕娘。 傳聞我的和親對象是個殘疾皇子脓规,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內容