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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java BIO、NIO、AIO的区别

發布時間:2023/12/4 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java BIO、NIO、AIO的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、基礎概念

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

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

阻塞:是指當試圖對該文件描述符進行讀寫時,如果當時沒有東西可讀,或者暫時不可寫,程序就進入等待狀態,直到有東西可讀或者可寫為止。

非阻塞:在非阻塞狀態下,如果沒有東西可讀,或者不可寫,讀寫函數馬上返回,而不會等待。

二、BIO、NIO、AIO

Java BIO : 同步并阻塞。服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善。

Java NIO : 同步非阻塞。服務器實現模式為一個請求一個線程,即客戶端發送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理。

Java AIO(NIO.2) : 異步非阻塞。服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理。

三、使用場景

BIO、NIO、AIO適用場景分析:

BIO方式適用于連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,并發局限于應用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。

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

AIO方式使用于連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用OS參與并發操作,編程比較復雜,JDK7開始支持。

四、I/O多路復用模式

兩種I/O多路復用模式:Reactor模式和Proactor模式

一般地,I/O多路復用機制都依賴于一個事件多路分離器(Event Demultiplexer)。分離器對象可將來自事件源的I/O事件分離出來,并分發到對應的read/write事件處理器(Event Handler)。開發人員預先注冊需要處理的事件及其事件處理器(或回調函數);事件分離器負責將請求事件傳遞給事件處理器。兩個與事件分離器有關的模式是Reactor和Proactor。

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


模擬的Reactor模式:

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

步驟 2) 發"已經可讀"事件發給事先注冊的事件處理者或者回調 ( Reactor 要做的)

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

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


模擬的Proactor模式:

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

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

步驟 3) 把數據已經準備好的消息給用戶處理函數,即事件處理者(Proactor 要做的)

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。