JAVA-每日一面 2022-01-26

簡(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ù)通道。

  1. 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)有做。

  2. 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)?下?步的操作。

  3. 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)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容