關於java流的幾個概念:IO、BIO、NIO、AIO,有幾個人全知道?
關於同步、阻塞的知識我之前的文章有介紹,所以關於流用到這些概念與之前多執行緒用的概念一樣。
下面具體來看看java中的幾種流
IO/BIO
BIO就是指IO,即傳統的Blocking IO,即同步並阻塞的IO。這也是jdk1.4之前的唯一選擇,依賴於ServerSocket實現,即一個請求對應一個執行緒,如果執行緒數不夠連線則會等待空餘執行緒或者拒絕連線。所以用這種方式,在高併發情況下效率是很低的,也不可靠,一般只應用於連線數比較小且固定架構的應用,但api也比較容易使用。
NIO
新的IO,即New IO或者Non-Blocking IO,即同步不阻塞的IO。jdk1.4之後提供了一系列的方法來操作流,定義在java.nio包下面。相比於傳統的BIO,NIO 提供了高速的面向快的I/O,它加入了Buffer、Channel、Selector等概念。它是基於事件驅動的,採用了Reactor模式,它使用一個執行緒管理所有的socket通道,即客戶端傳送的連線請求都會註冊到多路複用器上,多路複用器輪詢到連線有I/O請求時才啟動一個執行緒進行處理。它的特點是要不斷主動地去詢問資料有沒有處理完,一般只適用於連線數目較大但連線時間短的應用,如聊天應用等。
AIO
新的IO2.0,即NIO2.0,jdk1.7開始應用,叫做非同步不阻塞的IO。AIO引入異常通道的概念,採用了Proactor模式,簡化了程式編寫,一個有效的請求才啟動一個執行緒,它的特點是先由作業系統完成後才通知服務端程式啟動執行緒去處理,一般適用於連線數較多且連線時間長的應用。
幾種IO的綜合對比:
BIONIOAIO
客戶端:執行緒數1:1M:1M:0
阻塞型別阻塞非阻塞非阻塞
同步型別同步同步非同步
程式設計難度簡單非常複雜複雜
除錯難度簡單複雜複雜
可靠性非常差高高
吞吐量低高高
java提供的NIO的api使用比較複雜,一般建議使用像netty這樣的框架,而不要使用jdk自帶的api。
相關文章
- Java BIO,NIO,AIOJavaAI
- BIO、NIO、多路複用IO、AIOAI
- BIO、NIO、AIOAI
- java BIO/NIO/AIO 學習JavaAI
- BIO、NIO、AIO的區別AI
- BIO,NIO,AIO概覽AI
- NIO、BIO、AIO區別AI
- 今天我們來聊Java IO模型,BIO、NIO、AIO三種常見IO模型Java模型AI
- Java核心(五)深入理解BIO、NIO、AIOJavaAI
- NIO、BIO、AIO 與 PHP 實現AIPHP
- 【網路IO系列】IO的五種模型,BIO、NIO、AIO、IO多路複用、 訊號驅動IO模型AI
- Java IO學習筆記五:BIO到NIOJava筆記
- BIO、NIO、AIO區別(看不懂你打我)AI
- Netty-BIO、NIO、AIO、零複製-2NettyAI
- 7個關於"this"面試題,你知道幾個?面試題
- 面試官:BIO、NIO、AIO是什麼,他們有什麼區別?面試AI
- Java--NIO&&AIOJavaAI
- 三分鐘秒懂BIO/NIO/AIO區別?AI
- 關於Oracle 資料庫備份的幾個概念Oracle資料庫
- java BIO、NIO學習Java
- 水煮oracle25-----關於儲存的幾個概念理解Oracle
- 一文搞懂NIO、AIO、BIO的核心區別(建議收藏)AI
- 公司型別相關的幾個概念型別
- JS 總結之關於 this 應該知道的幾個點JS
- Java雜記10—BIO,BIO和NIO的區別Java
- Spring整合RabbitMQ-必須知道的幾個概念SpringMQ
- 關於MongoDB你需要知道的幾件事MongoDB
- 關於面試你不知道的幾點面試
- 關於Java IO與NIO知識都在這裡Java
- 關於shutdown的幾個模式模式
- Apache Tomcat 7 Configuration BIO NIO AIO APR ThreadPoolApacheTomcatAIthread
- CSS核心的幾個概念CSS
- 關於Mysql事務,你必須知道的幾個知識點!MySql
- 【網路安全】你必須知道的幾個網路安全概念
- 有關GIT的幾個基礎操作Git
- 【轉】有關dataguard的幾個查詢
- JAVA阻塞IO(BIO)簡介Java
- banq,關於第5章的框架,有幾個問題,急。框架