首頁 > 軟體

JavaIO模型中的BIO,NIO和AIO詳解

2022-02-16 19:00:43

一、I/O模型

1.1 I/O模型基本說明

I/O模型的簡單理解:I/O模型就是用什麼樣的通道進行資料的傳送和接受,很大程度上決定了程式通訊的效能

1.2 Java支援的3種網路程式設計I/O模式

Java共支援3種網路程式設計模型I/O模式:BIO、NIO、AIO

1.3 JavaBIO(同步阻塞)

JavaBIO:傳統的阻塞模式

同步且阻塞(傳統阻塞性),伺服器實現模式為一個連線一個伺服器,即使用者端有連線請求時伺服器就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷

下圖為BIO簡單執行流程

傳統的阻塞式

BIO的缺點是使用者端一直在連線伺服器,伺服器會為每一個使用者端開闢一個執行緒對使用者端處理,但有時使用者端不是一直對伺服器進行IO操作的,所以這樣會導致伺服器阻塞,進而對伺服器產生很多不必要的執行緒開銷,資源浪費

1.4 JavaNIO (同步非阻塞)

JavaNIO:同步非阻塞

同步非阻塞,伺服器實現模式為一個執行緒處理多個請求(連線),即使用者端傳送的連線請求都會註冊到多路複用器上(Selector),多路複用輪詢到連線有I/O請求就進行處理

下圖為NIO簡單執行流程

NIO的優點

由於使用者端不是一直對伺服器進行IO操作的,所以通過Selector選擇器進行輪詢,均勻分配到需要對伺服器進行IO操作的使用者端,這樣就利用了使用者端閒置的時間來節省伺服器記憶體的消耗

當然,如果使用者端數量增大,伺服器就要再開一個Thread連線Selector進行輪詢分配,以此類推,這樣就充分的減少記憶體消耗

1.5 JavaAIO(非同步非阻塞)

JavaAIO:非同步非阻塞

非同步非阻塞,AIO引入非同步通道的概念,採用了Proactor模式,簡化了程式編寫,有效的請求才啟動執行緒,它的特點是先由作業系統完成後才通知伺服器端程式啟動執行緒去處理,一般適用於連線數較多且連線時間較長的應用

AIO目前並沒有得到廣泛的應用

AIO和作業系統有非常密切的關係

我們就不再進行畫圖講解了,AIO瞭解即可

二、BIO、NIO、AIO適用場景分析

2.1 BIO應用場景

BIO方式適用於連線數目比較少且固定的架構,這種方式對伺服器資源要求比較高,並行侷限於應用中,JDK1.4 以前的唯一選擇,但程式簡單易理解

2.2 NIO應用場景

NIO方式適用於連線數目較多且連線比較短(輕操作)的架構,比如聊天伺服器,彈幕系統,伺服器間通訊等,程式設計比較複雜,JDK1.4開始支援

2.3 AIO應用場景

AIO方式使用於連線數目較多且連線時間較長(重操作)的架構,比如相簿伺服器,充分呼叫OS作業系統參與並行操作,程式設計比較複雜,JDK1.7開始支援

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!    


IT145.com E-mail:sddin#qq.com