日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO

發(fā)布時(shí)間:2023/12/1 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在網(wǎng)絡(luò)編程中,接觸到最多的就是利用Socket進(jìn)行網(wǎng)絡(luò)通信開發(fā)。在Java中主要是以下三種實(shí)現(xiàn)方式BIO、NIO、AIO。

關(guān)于這三個(gè)概念的辨析以前一直都是好像懂,但是表達(dá)的不是很清楚,下面做個(gè)總結(jié)完全辨析清楚。

1. BIO方式

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

BIO 就是阻塞IO,每個(gè)TCP連接進(jìn)來服務(wù)端都需要?jiǎng)?chuàng)建一個(gè)線程來建立連接并進(jìn)行消息的處理。如果中間發(fā)生了阻塞(比如建立連接、讀數(shù)據(jù)、寫數(shù)據(jù)時(shí)發(fā)生阻礙),線程也會(huì)發(fā)生阻塞,并發(fā)情況下,N個(gè)連接需要N個(gè)線程來處理。

這種方式的缺點(diǎn)就是:并發(fā)情況下效率很低。

下面用一個(gè)圖示來說明BIO的工作情況

2. NIO方式

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

NIO 也就是非阻塞IO,是基于事件驅(qū)動(dòng)的思想(Reactor線程模型)。對(duì)比與BIO來說,NIO使用一個(gè)線程來管理所有的Socket 通道,也就是基于Selector機(jī)制,當(dāng)查詢到事件時(shí)(連接、接受連接、讀、寫),就會(huì)轉(zhuǎn)發(fā)給不同的處理線程(handler)。

下面給出Reactor模型的工作應(yīng)用圖:

3. AIO方式

AIO是JDK1.7提出的,也就是異步IO。AIO采用的是Proactor模式。我們首先應(yīng)該辨析的是AIO和NIO的區(qū)別:

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

(2)AIO的通知是發(fā)生在讀寫等處理之后的回調(diào),有通知時(shí)表示相關(guān)操作已經(jīng)結(jié)束了。

AIO在進(jìn)行讀寫操作時(shí),只需要調(diào)用相應(yīng)的read/write方法,并傳入CompletionHandler(動(dòng)作完成時(shí)處理器),在動(dòng)作完成后會(huì)調(diào)用CompletionHandler。 NIO的通知是發(fā)生在動(dòng)作之前,是在可讀可寫的時(shí)候,Selector發(fā)現(xiàn)了這些事件后就通知并調(diào)用Handler處理,

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

總結(jié)

以上是生活随笔為你收集整理的java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。