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