您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Java IO模型中的BIO,NIO和AIO是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Java IO模型中的BIO,NIO和AIO是什么”吧!
I/O模型的簡單理解:I/O模型就是用什么樣的通道進行數(shù)據(jù)的發(fā)送和接受,很大程度上決定了程序通信的性能
Java共支持3種網(wǎng)絡(luò)編程模型I/O模式:BIO、NIO、AIO
JavaBIO
:傳統(tǒng)的阻塞模式
同步且阻塞(傳統(tǒng)阻塞性),服務(wù)器實現(xiàn)模式為一個連接一個服務(wù)器,即客戶端有連接請求時服務(wù)器就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷
下圖為BIO簡單執(zhí)行流程
傳統(tǒng)的阻塞式
BIO的缺點是客戶端一直在連接服務(wù)器,服務(wù)器會為每一個客戶端開辟一個線程對客戶端處理,但有時客戶端不是一直對服務(wù)器進行IO操作的,所以這樣會導(dǎo)致服務(wù)器阻塞,進而對服務(wù)器產(chǎn)生很多不必要的線程開銷,資源浪費
JavaNIO
:同步非阻塞
同步非阻塞,服務(wù)器實現(xiàn)模式為一個線程處理多個請求(連接),即客戶端發(fā)送的連接請求都會注冊到多路復(fù)用器上(Selector),多路復(fù)用輪詢到連接有I/O請求就進行處理
下圖為NIO簡單執(zhí)行流程
NIO的優(yōu)點
由于客戶端不是一直對服務(wù)器進行IO操作的,所以通過Selector選擇器進行輪詢,均勻分配到需要對服務(wù)器進行IO操作的客戶端,這樣就利用了客戶端閑置的時間來節(jié)省服務(wù)器內(nèi)存的消耗
當然,如果客戶端數(shù)量增大,服務(wù)器就要再開一個Thread連接Selector進行輪詢分配,以此類推,這樣就充分的減少內(nèi)存消耗
JavaAIO
:異步非阻塞
異步非阻塞,AIO引入異步通道的概念,采用了Proactor模式,簡化了程序編寫,有效的請求才啟動線程,它的特點是先由操作系統(tǒng)完成后才通知服務(wù)端程序啟動線程去處理,一般適用于連接數(shù)較多且連接時間較長的應(yīng)用
AIO目前并沒有得到廣泛的應(yīng)用
AIO和操作系統(tǒng)有非常密切的關(guān)系
我們就不再進行畫圖講解了,AIO了解即可
BIO方式適用于連接數(shù)目比較少且固定的架構(gòu),這種方式對服務(wù)器資源要求比較高,并發(fā)局限于應(yīng)用中,JDK1.4 以前的唯一選擇,但程序簡單易理解
NIO方式適用于連接數(shù)目較多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器,彈幕系統(tǒng),服務(wù)器間通訊等,編程比較復(fù)雜,JDK1.4開始支持
AIO方式使用于連接數(shù)目較多且連接時間較長(重操作)的架構(gòu),比如相冊服務(wù)器,充分調(diào)用OS操作系統(tǒng)參與并發(fā)操作,編程比較復(fù)雜,JDK1.7開始支持
到此,相信大家對“Java IO模型中的BIO,NIO和AIO是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。