文章目錄
- 通信技術整體解決的問題
- 1 I/O 模型基本說明
- 2 I/O模型
- Java BIO
- Java NIO
- Java AIO
- 3 BIO、NIO、AIO 適用場景分析
通信技術整體解決的問題
- 局域網內的通信要求。
- 多系統間的底層消息傳遞機制。
- 高并發下,大數據量的通信場景需要。
- 游戲行業。無論是手游服務端,還是大型的網絡游戲,Java語言都得到越來越廣泛的應用。
1 I/O 模型基本說明
I/O 模型:就是用什么樣的通道或者說是通信模式和架構進行數據的傳輸和接收,很大程度上決定了程序通信的性能,Java 共支持 3 種網絡編程的/IO 模型:BIO、NIO、AIO
實際通信需求下,要根據不同的業務場景和性能需求決定選擇不同的I/O模型
2 I/O模型
Java BIO
同步并阻塞(傳統阻塞型),服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器
端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷 【簡單示意圖
Java NIO
Java NIO : 同步非阻塞,服務器實現模式為一個線程處理多個請求(連接),即客戶端發送的連接請求都會注
冊到多路復用器上,多路復用器輪詢到連接有 I/O 請求就進行處理 【簡單示意圖】
Java AIO
Java AIO(NIO.2) : 異步 異步非阻塞,服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理,一般適用于連接數較
多且連接時間較長的應用
3 BIO、NIO、AIO 適用場景分析
1、BIO 方式適用于連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,并發局限于應用中,JDK1.4以前的唯一選擇,但程序簡單易理解。
2、NIO 方式適用于連接數目多且連接比較短(輕操作)的架構,比如聊天服務器,彈幕系統,服務器間通訊等。
編程比較復雜,JDK1.4 開始支持。
3、AIO方式使用于連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用 OS 參與并發操作,
編程比較復雜,JDK7 開始支持。