IO中常見面試題

Java IO 分類

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

Java NIO: 同步非阻塞猜丹,服務(wù)器實(shí)現(xiàn)模式為一個(gè)請(qǐng)求一個(gè)線程,即當(dāng)一個(gè)連接創(chuàng)建后硅卢,不需要對(duì)應(yīng)一個(gè)線程射窒,這個(gè)連接會(huì)被注冊(cè)到多路復(fù)用器上面妖混,所以所有的連接只需要一個(gè)線程就可以搞定,當(dāng)這個(gè)線程中的多路復(fù)用器進(jìn)行輪詢的時(shí)候轮洋,發(fā)現(xiàn)連接上有請(qǐng)求的話,才開啟一個(gè)線程進(jìn)行處理抬旺,也就是一個(gè)請(qǐng)求一個(gè)線程模式弊予。BIO與NIO一個(gè)比較重要的不同,是我們使用BIO的時(shí)候往往會(huì)引入多線程开财,每個(gè)連接一個(gè)單獨(dú)的線程汉柒;而NIO則是使用單線程或者只使用少量的多線程,每個(gè)連接共用一個(gè)線程责鳍。

Java AIO(NIO.2): 異步非阻塞碾褂,服務(wù)器實(shí)現(xiàn)模式為一個(gè)有效請(qǐng)求一個(gè)線程,客戶端的I/O請(qǐng)求都是由OS先完成了再通知服務(wù)器應(yīng)用去啟動(dòng)線程進(jìn)行處理历葛。

名詞解釋

同步:指的是用戶進(jìn)程觸發(fā)IO操作需要等待或者輪詢的去查看IO操作執(zhí)行完成才能執(zhí)行其他操作.這種方式性能比較差正塌,只有一些對(duì)數(shù)據(jù)安全性要求比較高的場景中才會(huì)使用.

異步:異步是指用戶進(jìn)程觸發(fā)IO操作以后便開始做自己的事情,而當(dāng)IO操作已經(jīng)完成的時(shí)候會(huì)得到IO完成的通知(異步的特點(diǎn)就是通知)

阻塞:所謂阻塞方式的意思是指, 當(dāng)試圖對(duì)該文件描述符進(jìn)行讀寫時(shí), 如果當(dāng)時(shí)沒有東西可讀,或者暫時(shí)不可寫, 程序就進(jìn)入等待 狀態(tài), 直到有東西可讀或者可寫為止

非阻塞:非阻塞狀態(tài)下, 如果沒有東西可讀, 或者不可寫, 讀寫函數(shù)馬上返回, 而不會(huì)等待

BIO恤溶、NIO乓诽、AIO適用場景分析

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對(duì)服務(wù)器資源要求比較高咒程,并發(fā)局限于應(yīng)用中鸠天,JDK1.4以前的唯一選擇,但程序直觀簡單易理解帐姻。

NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu)稠集,比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中饥瓷,編程比較復(fù)雜剥纷,JDK1.4開始支持。

AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu)扛伍,比如相冊(cè)服務(wù)器筷畦,充分調(diào)用OS參與并發(fā)操作,編程比較復(fù)雜刺洒,JDK7開始支持鳖宾。

Java NIO和IO的主要區(qū)別

面向流與面向緩沖. Java NIO和IO之間第一個(gè)最大的區(qū)別是,IO是面向流的逆航,NIO是面向緩沖區(qū)的鼎文。Java IO面向流意味著每次從流中讀一個(gè)或多個(gè)字節(jié),直至讀取所有字節(jié)因俐,它們沒有被緩存在任何地方拇惋。此外周偎,它不能前后移動(dòng)流中的數(shù)據(jù)。如果需要前后移動(dòng)從流中讀取的數(shù)據(jù)撑帖,需要先將它緩存到一個(gè)緩沖區(qū)蓉坎。 Java NIO的緩沖導(dǎo)向方法略有不同。數(shù)據(jù)讀取到一個(gè)它稍后處理的緩沖區(qū)胡嘿,需要時(shí)可在緩沖區(qū)中前后移動(dòng)蛉艾。這就增加了處理過程中的靈活性。

阻塞與非阻塞IO Java IO的各種流是阻塞的衷敌。這意味著勿侯,當(dāng)一個(gè)線程調(diào)用read() 或 write()時(shí),該線程被阻塞缴罗,直到有一些數(shù)據(jù)被讀取助琐,或數(shù)據(jù)完全寫入。該線程在此期間不能再干任何事情了面氓。 Java NIO的非阻塞模式兵钮,使一個(gè)線程從某通道發(fā)送請(qǐng)求讀取數(shù)據(jù),但是它僅能得到目前可用的數(shù)據(jù)侧但,如果目前沒有數(shù)據(jù)可用時(shí)矢空,該線程可以繼續(xù)做其他的事情。 非阻塞寫也是如此禀横。一個(gè)線程請(qǐng)求寫入一些數(shù)據(jù)到某通道屁药,但不需要等待它完全寫入,這個(gè)線程同時(shí)可以去做別的事情柏锄。線程通常將非阻塞IO的空閑時(shí)間用于在其它通道上執(zhí)行IO操作酿箭,所以一個(gè)單獨(dú)的線程現(xiàn)在可以管理多個(gè)輸入和輸出通道(channel)。

選擇器(Selectors) Java NIO的選擇器允許一個(gè)單獨(dú)的線程來監(jiān)視多個(gè)輸入通道趾娃,你可以注冊(cè)多個(gè)通道使用一個(gè)選擇器缭嫡,然后使用一個(gè)單獨(dú)的線程來“選擇”通道:這些通道里已經(jīng)有可以處理的輸入,或者選擇已準(zhǔn)備寫入的通道抬闷。這種選擇機(jī)制妇蛀,使得一個(gè)單獨(dú)的線程很容易來管理多個(gè)通道。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笤成,一起剝皮案震驚了整個(gè)濱河市评架,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炕泳,老刑警劉巖纵诞,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異培遵,居然都是意外死亡浙芙,警方通過查閱死者的電腦和手機(jī)登刺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗡呼,“玉大人纸俭,你說我怎么就攤上這事∧洗埃” “怎么了掉蔬?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長矾瘾。 經(jīng)常有香客問我,道長箭启,這世上最難降的妖魔是什么壕翩? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮傅寡,結(jié)果婚禮上放妈,老公的妹妹穿的比我還像新娘。我一直安慰自己荐操,他們只是感情好芜抒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著托启,像睡著了一般宅倒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屯耸,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天拐迁,我揣著相機(jī)與錄音,去河邊找鬼疗绣。 笑死线召,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的多矮。 我是一名探鬼主播缓淹,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼塔逃!你這毒婦竟也來了讯壶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤患雏,失蹤者是張志新(化名)和其女友劉穎鹏溯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淹仑,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丙挽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年肺孵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颜阐。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡平窘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凳怨,到底是詐尸還是另有隱情瑰艘,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布肤舞,位于F島的核電站紫新,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏李剖。R本人自食惡果不足惜芒率,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篙顺。 院中可真熱鬧偶芍,春花似錦、人聲如沸德玫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宰僧。三九已至材彪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琴儿,已是汗流浹背查刻。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凤类,地道東北人穗泵。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像谜疤,于是被迫代替她去往敵國和親佃延。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 從三月份找實(shí)習(xí)到現(xiàn)在夷磕,面了一些公司履肃,掛了不少,但最終還是拿到小米坐桩、百度尺棋、阿里、京東绵跷、新浪膘螟、CVTE成福、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,240評(píng)論 11 349
  • Java SE 基礎(chǔ): 封裝、繼承荆残、多態(tài) 封裝: 概念:就是把對(duì)象的屬性和操作(或服務(wù))結(jié)合為一個(gè)獨(dú)立的整體奴艾,并盡...
    Jayden_Cao閱讀 2,108評(píng)論 0 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)内斯,斷路器蕴潦,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,101評(píng)論 0 62
  • 歡迎光臨俘闯。 發(fā)條小姐等你很久了~ 什么時(shí)候適合談戀愛潭苞? 什么樣的人是合適的人? 對(duì)于渣男究竟應(yīng)該如何定義真朗? 這三個(gè)...
    小鈳噯閱讀 1,084評(píng)論 0 1