1. 程式人生 > >BIO,偽非同步IO,NIO,AIO與Netty

BIO,偽非同步IO,NIO,AIO與Netty

BIO(阻塞IO)

一個執行緒負責連線,一請求一應答,缺乏彈性伸縮能力。

 

偽非同步IO通訊(BIO優化版本)

執行緒池負責連線,M請求N應答,執行緒池阻塞。偽非同步IO是BIO的一個優化方案。

建立N個執行緒的執行緒池對請求進行處理,由於執行緒池可建立大小,所以資源是可控的,當併發很大時也不會造成資源耗盡或者當機,但當有大量客戶端接入的時候會造成執行緒池阻塞。

 

NIO通訊(非阻塞IO,JDK1.4後引入)

緩衝區Buffer,通道Channel,多路複用器Selector。

任何時候訪問NIO中的資料都是通過緩衝區進行操作的。

網路資料通過通道Channel進行讀寫,是雙向全雙工的。

Selector會不斷的輪詢註冊在其上的Channel,當某個Channel發生讀寫事件會被輪詢出來,通過SelectorKey獲取就緒Channel的

集合進行後續的IO操作,JDK使用epoll()代替傳統的selector實現,所以並沒有最大連線數的限制,可以接入成千上萬的客戶端,所以在IO通訊領域是一個極大的進步。

 

AIO通訊(非同步非阻塞IO,JDK1.7之後,NIO2.0)

連結註冊讀寫事件和回撥函式,讀寫方法非同步,主動通知程式。

四種IO對比

Netty

Netty是由

JBOSS提供的一個java開源框架。Netty提供非同步的、事件驅動的網路應用程式框架和工具,用以快速開發高效能、高可靠性的網路伺服器和客戶端程式。Netty 是一個基於NIO的客戶、伺服器端程式設計框架。

Netty的應用使用請看下章。