更新時(shí)間:2020-05-07 14:50:51 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2818次
以BIO形式的文件讀取和復(fù)制:
NIO讀取過程:
NIO形式的讀取和復(fù)制
阻塞IO和非阻塞IO這兩個(gè)概念是程序級(jí)別的。主要描述的是程序請(qǐng)求操作系統(tǒng)IO操作后,如果IO資源沒有準(zhǔn)備好,那么程序該如何處理的問題:前者等待;后者繼續(xù)執(zhí)行(并且使用線程一直輪詢,直到有IO資源準(zhǔn)備好了)。
同步IO和異步 IO,這兩個(gè)概念是操作系統(tǒng)級(jí)別的。主要描述的是操作系統(tǒng)在收到程序請(qǐng)求IO操作后,如果IO資源沒有準(zhǔn)備好,該如何響應(yīng)程序的問題:前者不響應(yīng),直到IO資源準(zhǔn)備好以后;后者返回一個(gè)標(biāo)記(好讓程序和自己知道以后的數(shù)據(jù)往哪里通知),當(dāng)IO資源準(zhǔn)備好以后,再用事件機(jī)制返回給程序。
同步阻塞IO(JAVABIO):
服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程,每當(dāng)客戶端有連接請(qǐng)求時(shí)服務(wù)器端就需要啟動(dòng)一個(gè)線程進(jìn)行處理。而且服務(wù)器需要一直處于等待狀態(tài),一直在 accept();。如果這個(gè)連接不做任何事會(huì)造成不必要的開銷。
同步非阻塞IO(JavaNIO):
服務(wù)器實(shí)現(xiàn)模式為一個(gè)請(qǐng)求一個(gè)線程,即客戶端發(fā)送的連接請(qǐng)求都會(huì)注冊(cè)到多路復(fù)用器上,多路復(fù)用器輪詢到連接有I/O請(qǐng)求時(shí)才啟動(dòng)一個(gè)線程進(jìn)行處理。用戶進(jìn)程也需要時(shí)不時(shí)的詢問IO操作是否就緒,這就要求用戶進(jìn)程不停的去詢問。
異步阻塞IO(JavaNIO):
此種方式下是指應(yīng)用發(fā)起一個(gè)IO操作以后,不等待內(nèi)核IO操作的完成,等內(nèi)核完成IO操作以后會(huì)通知應(yīng)用程序,這其實(shí)就是同步和異步最關(guān)鍵的區(qū)別,同步必須等待或者主動(dòng)的去詢問IO是否完成。(比如你買了一份快遞,你不需要一天二十四小時(shí)去關(guān)注快遞的狀態(tài),而是當(dāng)快遞到了或丟了等特殊情況下會(huì)通知你。)
阻塞是因?yàn)榇藭r(shí)是通過select系統(tǒng)調(diào)用來完成的,而select函數(shù)本身的實(shí)現(xiàn)方式是阻塞的,而采用select函數(shù)有個(gè)好處就是它可以同時(shí)監(jiān)聽多個(gè)文件句柄從而提高系統(tǒng)的并發(fā)性!
還有更強(qiáng)的異步非阻塞(AIO)。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“編程基礎(chǔ)學(xué)習(xí),用Java io流讀取文件”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)