BIO、NIO、AIO的區別
BIO、NIO、AIO
最近打算學習一下netty框架,netty是一款用於高效開發網路應用的NIO網路架構。在學習它之前,我覺得有必要對java IO程式設計知識進行一定的瞭解。
在講 BIO,NIO,AIO 之前先來回顧一下這樣幾個概念:同步與非同步,阻塞與非阻塞。
同步與非同步
同步: 同步就是發起一個呼叫後,被呼叫者未處理完請求之前,呼叫不返回。
非同步: 非同步就是發起一個呼叫後,立刻得到被呼叫者的回應表示已接收到請求,但是被呼叫者並沒有返回結果,此時我們可以處理其他的請求,被呼叫者通常依靠事件,回撥等機制來通知呼叫者其返回結果。
同步和非同步的區別最大在於非同步的話呼叫者不需要等待處理結果,被呼叫者會通過回撥等機制來通知呼叫者其返回結果。
阻塞和非阻塞
阻塞: 阻塞就是發起一個請求,呼叫者一直等待請求結果返回,也就是當前執行緒會被掛起,無法從事其他任務,只有當條件就緒才能繼續。
非阻塞: 非阻塞就是發起一個請求,呼叫者不用一直等著結果返回,可以先去幹其他事情。
那麼同步阻塞、同步非阻塞和非同步非阻塞又代表什麼意思呢?
舉個生活中簡單的例子,你媽媽讓你燒水,小時候你比較笨啊,在哪裡傻等著水開(同步阻塞)。等你稍微再長大一點,你知道每次燒水的空隙可以去幹點其他事,然後只需要時不時來看看水開了沒有(同步非阻塞)。後來,你們家用上了水開了會發出聲音的壺,這樣你就只需要聽到響聲後就知道水開了,在這期間你可以隨便幹自己的事情,你需要去倒水了(非同步非阻塞)
Java BIO
BIO稱為同步並阻塞是傳統阻塞IO模型。主要表現形式為服務端對客戶端發起的請求,一個請求就開啟一個執行緒做處理。如果這個連線不做任何事情會造成不必要的執行緒開銷
Java NIO
NIO 稱為同步非阻塞,伺服器實現模式為一個執行緒處理多個請求(連線),即客戶端傳送的連線請求都會注 冊到多路複用器上,多路複用器輪詢到連線有 I/O 請求就進行處理 .
Java AIO
AIO,非同步非阻塞IO模型也稱為NIO2.0,伺服器實現模式為一個有效請求一個執行緒,客戶端較多的IO請求都是有求都是由OS(作業系統)先完成了再通知伺服器應用去啟動執行緒進行處理。
主要區別
1.BIO 方式適用於連線數目比較小且固定的架構,這種方式對伺服器資源要求比較高,併發侷限於應用中,JDK1.4以前的唯一選擇,但程式簡單易理解。
2.NIO 方式適用於連線數目多且連線比較短(輕操作)的架構,比如聊天伺服器,彈幕系統,伺服器間通訊等。 程式設計比較複雜,JDK1.4 開始支援。
3.AIO 方式使用於連線數目多且連線比較長(重操作)的架構,比如相簿伺服器,充分呼叫 OS 參與併發操作, 程式設計比較複雜,JDK7 開始支援。
參考部落格:Java面試常考的 BIO,NIO,AIO 總結
相關文章
- NIO、BIO、AIO區別AI
- BIO、NIO、AIOAI
- BIO、NIO、AIO區別(看不懂你打我)AI
- Java BIO,NIO,AIOJavaAI
- 三分鐘秒懂BIO/NIO/AIO區別?AI
- BIO,NIO,AIO概覽AI
- 一文搞懂NIO、AIO、BIO的核心區別(建議收藏)AI
- java BIO/NIO/AIO 學習JavaAI
- nio aio netty區別AINetty
- BIO、NIO、多路複用IO、AIOAI
- NIO、BIO、AIO 與 PHP 實現AIPHP
- 面試官:BIO、NIO、AIO是什麼,他們有什麼區別?面試AI
- Java雜記10—BIO,BIO和NIO的區別Java
- Apache Tomcat 7 Configuration BIO NIO AIO APR ThreadPoolApacheTomcatAIthread
- Java核心(五)深入理解BIO、NIO、AIOJavaAI
- Netty-BIO、NIO、AIO、零複製-2NettyAI
- NIO、BIO、Selector
- 今天我們來聊Java IO模型,BIO、NIO、AIO三種常見IO模型Java模型AI
- From BIO to NIO series —— BIO source code interpretation
- From BIO to NIO —— NIO source code interpretation 1
- 【網路IO系列】IO的五種模型,BIO、NIO、AIO、IO多路複用、 訊號驅動IO模型AI
- java BIO、NIO學習Java
- 網路程式設計NIO:BIO和NIO程式設計
- BIO到NIO原始碼的一些事兒之BIO原始碼
- BIO到NIO原始碼的一些事兒之NIO 上原始碼
- BIO到NIO原始碼的一些事兒之NIO 中原始碼
- NIO與IO區別
- 從BIO和NIO到Netty實踐Netty
- BIO到NIO原始碼的一些事兒之NIO 下 之 Selector原始碼
- 從 BIO、NIO 到 Netty【前置知識點】Netty
- Java IO學習筆記五:BIO到NIOJava筆記
- BIO到NIO原始碼的一些事兒之NIO 下 Buffer解讀 上原始碼
- BIO到NIO原始碼的一些事兒之NIO 下 Buffer解讀 下原始碼
- Java NIO和NIO.2有什麼區別? | baeldungJava
- Nio再學習之NIO的buffer緩衝區
- 【Java面試】IO和NIO有什麼區別?Java面試
- 阿里面試題BIO和NIO數量問題附答案和程式碼阿里面試題
- Java NIO:緩衝區Java