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