首頁  >  文章  >  Java  >  Java中網路IO的實作方式介紹(圖文)

Java中網路IO的實作方式介紹(圖文)

黄舟
黄舟原創
2017-03-17 10:03:551433瀏覽

這篇文章主要介紹了Java中網路IO的實作方式(BIO、NIO、AIO)介紹的相關資料,需要的朋友可以參考下

在網路程式設計中,接觸到最多的就是利用Socket進行網路通訊開發。在Java中主要是以下三種實作方式BIO、NIO、AIO。

關於這三個概念的辨析以前一直都是好像懂,但是表達的不是很清楚,下面做個總結完全辨析清楚。

1. BIO方式

首先我用一個較為通俗的語言來說明:

BIO 就是阻塞IO,每個TCP連接進來服務端都需要建立一個執行緒來建立連線並進行訊息的處理。如果中間發生了阻塞(例如建立連線、讀取資料、寫資料時發生阻礙),執行緒也會發生阻塞,並發情況下,N個連線需要N個執行緒來處理。
這種方式的缺點就是:並發情況下效率很低。

下面用一個圖示來說明BIO的工作狀況

#2.NIO方式

#NIO是JDK1.4提出的,還是先用一段通俗的話來說明NIO的工作原理:

NIO 也就是非阻塞IO,是基於事件##驅動的思想(Reactor線程模型)。比較與BIO來說,NIO使用一個執行緒來管理所有的Socket 通道,也就是基於Selector機制,當查詢到事件時(連接、接受連接、讀、寫),就會轉發給不同的處理線程(handler) 。

下面給出Reactor模型的工作應用圖:


#3. AIO方式

AIO是JDK1.7提出的,也就是非同步IO。 AIO採用的是Proactor模式。我們首先應該辨析的是AIO和NIO的區別:

(1)NIO的通知是發生在Handler之前;

(2)AIO的通知是發生在讀寫等處理之後的回調,有通知時表示相關操作已經結束了。

AIO在進行讀寫操作時,只需要呼叫對應的read/write方法,並傳入CompletionHandler(動作完成時處理器),在動作完成後會呼叫CompletionHandler。 NIO的通知是發生在動作之前,是在可讀可寫的時候,Selector發現了這些事件後就通知並調用Handler處理,

下面給出Proactor模式的工作流程圖:


以上是Java中網路IO的實作方式介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn