BIO,NIO,AIO
BIO,NIO,AIO 介紹
- 一、背景
- 1.1 說明
- 1.2 通信技術整體解決的問題
- 二、Java的I/O演進之路
- 2.1 I/O 模型基本說明
- 2.2 I/O模型
- Java BIO
- Java NIO
- Java AIO
- 2.3 BIO、NIO、AIO 適用場景分析
- 三、BIO,NIO,AIO總結
一、背景
1.1 說明
? 在Java的軟件設計開發中,通信架構是不可避免的,我們在進行不同系統或者不同進程之間的數據交互,或者在高并發下的通信場景下都需要用到網絡通信相關的技術,對于一些經驗豐富的程序員來說,Java早期的網絡通信架構存在一些缺陷,其中最令人惱火的是基于性能低下的同步阻塞式的I/O通信(BIO),隨著互聯網開發下通信性能的高要求,Java在2002年開始支持了非阻塞式的I/O通信技術(NIO)。大多數讀者在學習網絡通信相關技術的時候,都只是接觸到零碎的通信技術點,沒有完整的技術體系架構,以至于對于Java的通信場景總是沒有清晰的解決方案。本次課程將通過大量清晰直接的案例從最基礎的BIO式通信開始介紹到NIO , AIO,讀者可以清晰的了解到阻塞、同步、異步的現象、概念和特征以及優缺點。本課程結合了大量的案例讓讀者可以快速了解每種通信架構的使用。
1.2 通信技術整體解決的問題
- 局域網內的通信要求。
- 多系統間的底層消息傳遞機制。
- 高并發下,大數據量的通信場景需要。
- 游戲行業。無論是手游服務端,還是大型的網絡游戲,Java語言都得到越來越廣泛的應用。
二、Java的I/O演進之路
2.1 I/O 模型基本說明
I/O 模型:就是用什么樣的通道或者說是通信模式和架構進行數據的傳輸和接收,很大程度上決定了程序通信的性能,Java 共支持 3 種網絡編程的/IO 模型:BIO、NIO、AIO實際通信需求下,要根據不同的業務場景和性能需求決定選擇不同的I/O模型
2.2 I/O模型
Java BIO
同步并阻塞(傳統阻塞型),服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷。
詳細介紹見
Java NIO
Java NIO : 同步非阻塞,服務器實現模式為一個線程處理多個請求(連接),即客戶端發送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有 I/O 請求就進行處理。
詳細介紹見
Java AIO
Java AIO(NIO.2) : 異步 異步非阻塞,服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理,一般適用于連接數較
多且連接時間較長的應用
詳細介紹見
2.3 BIO、NIO、AIO 適用場景分析
JDK1.4以前的唯一選擇,但程序簡單易理解。
編程比較復雜,JDK1.4 開始支持。
編程比較復雜,JDK7 開始支持。
三、BIO,NIO,AIO總結
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開始支持。Netty!
總結
以上是生活随笔為你收集整理的BIO,NIO,AIO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中文电子病例命名实体识别项目
- 下一篇: 记一次Vue框架升级