BIO,NIO,AIO的理解(基礎(chǔ)篇)

此文參考:iteye
在高性能的IO體系設(shè)計(jì)中,有幾個(gè)名詞概念常常會(huì)使我們感到迷惑不解盛霎。

1.什么是同步赠橙?
2.什么是異步?
3.什么是阻塞愤炸?
4.什么是非阻塞期揪?
5.什么是同步阻塞?
6.什么是同步非阻塞规个?
7.什么是異步阻塞凤薛?
8.什么是異步非阻塞?

1.同步诞仓,異步缤苫,阻塞,非阻塞 的定義

對比圖

1.同步和異步是針對應(yīng)用程序和內(nèi)核的交互而言的墅拭。
2.阻塞和非阻塞是針對于進(jìn)程在訪問數(shù)據(jù)的時(shí)候活玲,根據(jù)IO操作的就緒狀態(tài)來采取的不同方式,說白了是一種讀取或者寫入操作函數(shù)的實(shí)現(xiàn)方式谍婉,阻塞方式下讀取或者寫入函數(shù)將一直等待舒憾,而非阻塞方式下,讀取或者寫入函數(shù)會(huì)立即返回一個(gè)狀態(tài)值穗熬。

由上描述基本可以總結(jié)一句簡短的話镀迂,同步和異步是目的,阻塞和非阻塞是實(shí)現(xiàn)方式唤蔗。

2.區(qū)別圖

id 名詞 解釋 example
1 同步 指的是用戶進(jìn)程觸發(fā)IO操作并等待或者輪詢的去查看IO操作是否就緒 自己親自出馬持銀行卡到銀行取錢(使用同步IO時(shí)招拙,Java自己處理IO讀寫)
2 異步 異步是指用戶進(jìn)程觸發(fā)IO操作以后便開始做自己的事情唧瘾,而當(dāng)IO操作已經(jīng)完成的時(shí)候會(huì)得到IO完成的通知(異步的特點(diǎn)就是通知) 委托一小弟拿銀行卡到銀行取錢,然后給你(使用異步IO時(shí)别凤,Java將IO讀寫委托給OS處理,需要將數(shù)據(jù)緩沖區(qū)地址和大小傳給OS(銀行卡和密碼)领虹,OS需要支持異步IO操作API)
3 阻塞 所謂阻塞方式的意思是指, 當(dāng)試圖對該文件描述符進(jìn)行讀寫時(shí), 如果當(dāng)時(shí)沒有東西可讀,或者暫時(shí)不可寫, 程序就進(jìn)入等待 狀態(tài), 直到有東西可讀或者可寫為止 ATM排隊(duì)取款规哪,你只能等待(使用阻塞IO時(shí),Java調(diào)用會(huì)一直阻塞到讀寫完成才返回)塌衰;
4 非阻塞 非阻塞狀態(tài)下, 如果沒有東西可讀, 或者不可寫, 讀寫函數(shù)馬上返回, 而不會(huì)等待 柜臺(tái)取款诉稍,取個(gè)號,然后坐在椅子上做其它事最疆,等號廣播會(huì)通知你辦理杯巨,沒到號你就不能去,你可以不斷問大堂經(jīng)理排到了沒有努酸,大堂經(jīng)理如果說還沒到你就不能去(使用非阻塞IO時(shí)服爷,如果不能讀寫Java調(diào)用會(huì)馬上返回,當(dāng)IO事件分發(fā)器會(huì)通知可讀寫時(shí)再繼續(xù)進(jìn)行讀寫获诈,不斷循環(huán)直到讀寫完成)

3.組合狀態(tài):

同步阻塞IO(JAVA BIO)

同步并阻塞仍源,服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程,即客戶端有連接請求時(shí)服務(wù)器端就需要啟動(dòng)一個(gè)線程進(jìn)行處理舔涎,如果這個(gè)連接不做任何事情會(huì)造成不必要的線程開銷笼踩,當(dāng)然可以通過線程池機(jī)制改善。

同步非阻塞IO(Java NIO)

同步非阻塞亡嫌,服務(wù)器實(shí)現(xiàn)模式為一個(gè)請求一個(gè)線程嚎于,即客戶端發(fā)送的連接請求都會(huì)注冊到多路復(fù)用器上,多路復(fù)用器輪詢到連接有I/O請求時(shí)才啟動(dòng)一個(gè)線程進(jìn)行處理挟冠。用戶進(jìn)程也需要時(shí)不時(shí)的詢問IO操作是否就緒于购,這就要求用戶進(jìn)程不停的去詢問。

異步阻塞IO(Java NIO)

此種方式下是指應(yīng)用發(fā)起一個(gè)IO操作以后圃郊,不等待內(nèi)核IO操作的完成价涝,等內(nèi)核完成IO操作以后會(huì)通知應(yīng)用程序,這其實(shí)就是同步和異步最關(guān)鍵的區(qū)別持舆,同步必須等待或者主動(dòng)的去詢問IO是否完成色瘩,那么為什么說是阻塞的呢?因?yàn)榇藭r(shí)是通過select系統(tǒng)調(diào)用來完成的逸寓,而select函數(shù)本身的實(shí)現(xiàn)方式是阻塞的居兆,而采用select函數(shù)有個(gè)好處就是它可以同時(shí)監(jiān)聽多個(gè)文件句柄(如果從UNP的角度看,select屬于同步操作竹伸。因?yàn)閟elect之后泥栖,進(jìn)程還需要讀寫數(shù)據(jù))簇宽,從而提高系統(tǒng)的并發(fā)性!

(Java AIO (NIO.2))異步非阻塞IO :

在此種模式下吧享,用戶進(jìn)程只需要發(fā)起一個(gè)IO操作然后立即返回魏割,等IO操作真正的完成以后,應(yīng)用程序會(huì)得到IO操作完成的通知钢颂,此時(shí)用戶進(jìn)程只需要對數(shù)據(jù)進(jìn)行處理就好了钞它,不需要進(jìn)行實(shí)際的IO讀寫操作,因?yàn)檎嬲腎O讀取或者寫入操作已經(jīng)由內(nèi)核完成了殊鞭。

4.BIO遭垛、NIO、AIO適用場景分析:

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu)操灿,這種方式對服務(wù)器資源要求比較高锯仪,并發(fā)局限于應(yīng)用中,JDK1.4以前的唯一選擇趾盐,但程序直觀簡單易理解庶喜。
NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器谤碳,并發(fā)局限于應(yīng)用中溃卡,編程比較復(fù)雜,JDK1.4開始支持蜒简。
AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu)瘸羡,比如相冊服務(wù)器,充分調(diào)用OS參與并發(fā)操作搓茬,編程比較復(fù)雜犹赖,JDK7開始支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卷仑,一起剝皮案震驚了整個(gè)濱河市峻村,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锡凝,老刑警劉巖粘昨,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窜锯,居然都是意外死亡张肾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門锚扎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吞瞪,“玉大人,你說我怎么就攤上這事驾孔∩指眩” “怎么了惯疙?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長妖啥。 經(jīng)常有香客問我霉颠,道長,這世上最難降的妖魔是什么荆虱? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任掉分,我火速辦了婚禮,結(jié)果婚禮上克伊,老公的妹妹穿的比我還像新娘。我一直安慰自己华坦,他們只是感情好愿吹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惜姐,像睡著了一般犁跪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歹袁,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天坷衍,我揣著相機(jī)與錄音,去河邊找鬼条舔。 笑死枫耳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孟抗。 我是一名探鬼主播迁杨,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凄硼!你這毒婦竟也來了铅协?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤摊沉,失蹤者是張志新(化名)和其女友劉穎狐史,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體说墨,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骏全,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婉刀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吟温。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖突颊,靈堂內(nèi)的尸體忽然破棺而出鲁豪,到底是詐尸還是另有隱情潘悼,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布爬橡,位于F島的核電站治唤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糙申。R本人自食惡果不足惜宾添,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柜裸。 院中可真熱鬧缕陕,春花似錦、人聲如沸疙挺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铐然。三九已至蔬崩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搀暑,已是汗流浹背沥阳。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留自点,地道東北人桐罕。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像樟氢,于是被迫代替她去往敵國和親冈绊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351