日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java BIO、NIO、AIO的区别

發(fā)布時(shí)間:2023/12/4 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java BIO、NIO、AIO的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、基礎(chǔ)概念

同步:是指的是用戶進(jìn)程觸發(fā)IO操作并等待或者輪詢的去查看IO操作是否就緒。

異步:是指用戶進(jìn)程觸發(fā)IO操作以后便開始做自己的事情,而當(dāng)IO操作已經(jīng)完成的時(shí)候會(huì)得到IO完成的通知(異步的特點(diǎn)就是通知)。(使用異步IO時(shí),Java將IO讀寫委托給OS處理,需要將數(shù)據(jù)緩沖區(qū)地址和大小傳給OS)?

阻塞:是指當(dāng)試圖對(duì)該文件描述符進(jìn)行讀寫時(shí),如果當(dāng)時(shí)沒有東西可讀,或者暫時(shí)不可寫,程序就進(jìn)入等待狀態(tài),直到有東西可讀或者可寫為止。

非阻塞:在非阻塞狀態(tài)下,如果沒有東西可讀,或者不可寫,讀寫函數(shù)馬上返回,而不會(huì)等待。

二、BIO、NIO、AIO

Java BIO : 同步并阻塞。服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程,即客戶端有連接請(qǐng)求時(shí)服務(wù)器端就需要啟動(dòng)一個(gè)線程進(jìn)行處理,如果這個(gè)連接不做任何事情會(huì)造成不必要的線程開銷,當(dāng)然可以通過線程池機(jī)制改善。

Java NIO : 同步非阻塞。服務(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)行處理。

Java AIO(NIO.2) : 異步非阻塞。服務(wù)器實(shí)現(xiàn)模式為一個(gè)有效請(qǐng)求一個(gè)線程,客戶端的I/O請(qǐng)求都是由OS先完成了再通知服務(wù)器應(yīng)用去啟動(dòng)線程進(jìn)行處理。

三、使用場(chǎng)景

BIO、NIO、AIO適用場(chǎng)景分析:

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對(duì)服務(wù)器資源要求比較高,并發(fā)局限于應(yīng)用中,JDK1.4以前的唯一選擇,但程序直觀簡(jiǎn)單易理解。

NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中,編程比較復(fù)雜,JDK1.4開始支持。

AIO方式使用于連接數(shù)目多且連接比較長(zhǎng)(重操作)的架構(gòu),比如相冊(cè)服務(wù)器,充分調(diào)用OS參與并發(fā)操作,編程比較復(fù)雜,JDK7開始支持。

四、I/O多路復(fù)用模式

兩種I/O多路復(fù)用模式:Reactor模式和Proactor模式

一般地,I/O多路復(fù)用機(jī)制都依賴于一個(gè)事件多路分離器(Event Demultiplexer)。分離器對(duì)象可將來自事件源的I/O事件分離出來,并分發(fā)到對(duì)應(yīng)的read/write事件處理器(Event Handler)。開發(fā)人員預(yù)先注冊(cè)需要處理的事件及其事件處理器(或回調(diào)函數(shù));事件分離器負(fù)責(zé)將請(qǐng)求事件傳遞給事件處理器。兩個(gè)與事件分離器有關(guān)的模式是Reactor和Proactor。

Reactor模式采用同步IO,而Proactor采用異步IO。


模擬的Reactor模式:

步驟 1) 等待事件 (Reactor 的工作)

步驟 2) 發(fā)"已經(jīng)可讀"事件發(fā)給事先注冊(cè)的事件處理者或者回調(diào) ( Reactor 要做的)

步驟 3) 讀數(shù)據(jù) (用戶代碼要做的)

步驟 4) 處理數(shù)據(jù) (用戶代碼要做的)


模擬的Proactor模式:

步驟 1) 等待事件 (Proactor 的工作)

步驟 2) 讀數(shù)據(jù)(看,這里變成成了讓 Proactor 做這個(gè)事情)

步驟 3) 把數(shù)據(jù)已經(jīng)準(zhǔn)備好的消息給用戶處理函數(shù),即事件處理者(Proactor 要做的)

步驟 4) 處理數(shù)據(jù) (用戶代碼要做的)

總結(jié)

以上是生活随笔為你收集整理的Java BIO、NIO、AIO的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。