簡(jiǎn)述一下bio與nio的區(qū)別
1、bio同步阻塞io:在此種?式下,?戶進(jìn)程在發(fā)起?個(gè)IO操作以后,必須等待IO操作的完成,只有當(dāng)真正完成了IO操作以后,?戶進(jìn)程才能運(yùn)?。JAVA傳統(tǒng)的IO模型屬于此種?式!
2、nio同步?阻塞式I/O;java NIO采?了雙向通道進(jìn)?數(shù)據(jù)傳輸,在通道上我們可以注冊(cè)我們感興趣的事件:連接事件、讀寫事件;
NIO主要有三?核?部分:Channel(通道),Buffer(緩沖區(qū)), Selector。傳統(tǒng)IO基于字節(jié)流和字符流進(jìn)?操作,?NIO基于Channel和
Buffer(緩沖區(qū))進(jìn)?操作,數(shù)據(jù)總是從通道讀取到緩沖區(qū)中,或者從緩沖區(qū)寫?到通道中。Selector(選擇區(qū))?于監(jiān)聽(tīng)多個(gè)通道的事件
(?如:連接打開(kāi),數(shù)據(jù)到達(dá))。因此,單個(gè)線程可以監(jiān)聽(tīng)多個(gè)數(shù)據(jù)通道。
BIO (Blocking I/O):同步阻塞I/O模式,數(shù)據(jù)的讀取寫?必須阻塞在?個(gè)線程內(nèi)等待其完成。這?使?那個(gè)經(jīng)典的燒開(kāi)?例?,
這?假設(shè)?個(gè)燒開(kāi)?的場(chǎng)景,有?排?壺在燒開(kāi)?,BIO的?作模式就是, 叫?個(gè)線程停留在?個(gè)?壺那,直到這個(gè)?壺?zé)_(kāi),才去
處理下?個(gè)?壺。但是實(shí)際上線程在等待?壺?zé)_(kāi)的時(shí)間段什么都沒(méi)有做。NIO (New I/O):同時(shí)?持阻塞與?阻塞模式,但這?我們以其同步?阻塞I/O模式來(lái)說(shuō)明,那么什么叫做同步?阻塞?如果還拿燒開(kāi)?來(lái)說(shuō),NIO的做法是叫?個(gè)線程不斷的輪詢每個(gè)?壺的狀態(tài),看看是否有?壺的狀態(tài)發(fā)?了改變,從?進(jìn)?下?步的操作。
AIO ( Asynchronous I/O):異步?阻塞I/O模型。異步?阻塞與同步?阻塞的區(qū)別在哪??異步?阻塞?需?個(gè)線程去輪詢所有IO操作的狀態(tài)改變,在相應(yīng)的狀態(tài)改變后,系統(tǒng)會(huì)通知對(duì)應(yīng)的線程來(lái)處理。對(duì)應(yīng)到燒開(kāi)?中就是,為每個(gè)?壺上?裝了?個(gè)開(kāi)關(guān),?燒開(kāi)之后,?壺會(huì)?動(dòng)通知我?燒開(kāi)了。