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

一、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開始支持

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!    

推薦閱讀: