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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍

發(fā)布時(shí)間:2025/3/8 linux 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從JDK 7版本開始,Java新加入的文件和網(wǎng)絡(luò)io特性稱為nio2(new io 2, 因?yàn)閖dk1.4中已經(jīng)有過一個(gè)nio了),包含了眾多性能和功能上的改進(jìn),其中最重要的部分,就是對(duì)異步io的支持,稱為Java AIO(asynchronous IO)。

因?yàn)锳IO的實(shí)施需充分調(diào)用OS參與,IO需要操作系統(tǒng)支持、并發(fā)也同樣需要操作系統(tǒng)的支持,所以性能方面不同操作系統(tǒng)差異會(huì)比較明顯。所以本文也附帶介紹了Linux 2.6及以后版本新增的AIO特性(因?yàn)檫@跟Java AIO是對(duì)應(yīng)關(guān)系)。

Java AIO

1基本原理

目前為止,Java共支持3種網(wǎng)絡(luò)編程模型:BIO、NIO、AIO:

Java BIO : 同步并阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程,即客戶端有連接請(qǐng)求時(shí)服務(wù)器端就需要啟動(dòng)一個(gè)線程進(jìn)行處理,如果這個(gè)連接不做任何事情會(huì)造成不必要的線程開銷,當(dāng)然可以通過線程池機(jī)制改善。

Java NIO : 同步非阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)請(qǐng)求一個(gè)線程,即客戶端發(fā)送的連接請(qǐng)求都會(huì)注冊(cè)到多路復(fù)用器上,多路復(fù)用器輪詢到連接有I/O請(qǐng)求時(shí)才啟動(dòng)一個(gè)線程進(jìn)行處理。

Java AIO(NIO.2) : 異步非阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)有效請(qǐng)求一個(gè)線程,客戶端的I/O請(qǐng)求都是由OS先完成了再通知服務(wù)器應(yīng)用去啟動(dòng)線程進(jìn)行處理。

BIO、NIO、AIO適用場(chǎng)景分析:

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對(duì)服務(wù)器資源要求比較高,并發(fā)局限于應(yīng)用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。

NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中,編程比較復(fù)雜,JDK1.4開始支持。

AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu),比如相冊(cè)服務(wù)器,充分調(diào)用OS參與并發(fā)操作,編程比較復(fù)雜,JDK7開始支持。

2AIO介紹

jdk在1.4版本的nio中提供了對(duì)非阻塞多路復(fù)用同步io模型的支持,但是在Windows上是基于較低效select/poll實(shí)現(xiàn)的。

jdk1.7中提供對(duì)aio的支持后,帶來了兩方面的好處:

Windows上可以使用iocp了。

簡化了網(wǎng)絡(luò)變成模型。異步io相比較非阻塞多路復(fù)用模型更易理解,開發(fā)更為簡單。

和多路復(fù)用的java nio相比較,可以發(fā)現(xiàn),異步io是在數(shù)據(jù)讀取或者寫入調(diào)用已經(jīng)完成的時(shí)候,再通知調(diào)用者,而非阻塞多路復(fù)用io則是在有數(shù)據(jù)就緒,可以讀寫的時(shí)候通知調(diào)用者,讀寫仍然是由調(diào)用者執(zhí)行并且是阻塞的(這意味著如果要同時(shí)進(jìn)行其他工作,要控制讀寫操作不能阻塞太長時(shí)間或者需要將其放去單獨(dú)的io線程執(zhí)行)。

JDK7中的java aio新增的類和接口主要有:

AsynchronousServerSocketChannel ,對(duì)應(yīng)于bio中的ServerSocket和nio中的ServerSocketChannel,用于server端的網(wǎng)絡(luò)程序。

AsynchronousSocketChannel,對(duì)云關(guān)于bio中的Socket和nio中的SocketChannel,用于client端的網(wǎng)絡(luò)程序。

CompletionHandler,回調(diào)接口,在socket進(jìn)行accept/connect/read/write等操作時(shí),可以傳入一個(gè)CompletionHandler的實(shí)現(xiàn),操作執(zhí)行完畢后,會(huì)調(diào)用注冊(cè)的CompletionHandler。

除了CompletionHandler這種回調(diào)方式,aio中還支持返回Future對(duì)象,使用Future來設(shè)定回調(diào)操作。

Linux AIO

1Linux AIO 簡介

Linux 異步 I/O 是 Linux 內(nèi)核中提供的一個(gè)相當(dāng)新的增強(qiáng)。它是 2.6 版本內(nèi)核的一個(gè)標(biāo)準(zhǔn)特性,但是我們?cè)?2.4 版本內(nèi)核的補(bǔ)丁中也可以找到它。AIO 背后的基本思想是允許進(jìn)程發(fā)起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知時(shí),進(jìn)程就可以檢索 I/O 操作的結(jié)果。

2Linux 的 I/O 模型

在深入介紹 AIO API 之前,讓我們先來探索一下 Linux 上可以使用的不同 I/O 模型。這并不是一個(gè)詳盡的介紹,但是我們將試圖介紹最常用的一些模型來解釋它們與異步 I/O 之間的區(qū)別。圖 1 給出了同步和異步模型,以及阻塞和非阻塞的模型。

基本 Linux I/O 模型的簡單矩陣:

每個(gè) I/O 模型都有自己的使用模式,它們對(duì)于特定的應(yīng)用程序都有自己的優(yōu)點(diǎn)。

同步阻塞 I/O:

如下圖所示:傳統(tǒng)的阻塞 I/O 模型,這也是目前應(yīng)用程序中最為常用的一種模型。其行為非常容易理解,其用法對(duì)于典型的應(yīng)用程序來說都非常有效。在調(diào)用 read 系統(tǒng)調(diào)用時(shí),應(yīng)用程序會(huì)阻塞并對(duì)內(nèi)核進(jìn)行上下文切換。然后會(huì)觸發(fā)讀操作,當(dāng)響應(yīng)返回時(shí)(從我們正在從中讀取的設(shè)備中返回),數(shù)據(jù)就被移動(dòng)到用戶空間的緩沖區(qū)中。然后應(yīng)用程序就會(huì)解除阻塞(read 調(diào)用返回)。

從應(yīng)用程序的角度來說,read 調(diào)用會(huì)延續(xù)很長時(shí)間。實(shí)際上,在內(nèi)核執(zhí)行讀操作和其他工作時(shí),應(yīng)用程序的確會(huì)被阻塞。

同步非阻塞 I/O:

同步阻塞 I/O 的一種效率稍低的變種是同步非阻塞 I/O。在這種模型中,設(shè)備是以非阻塞的形式打開的。這意味著 I/O 操作不會(huì)立即完成,read 操作可能會(huì)返回一個(gè)錯(cuò)誤代碼,說明這個(gè)命令不能立即滿足(EAGAIN 或 EWOULDBLOCK),如下圖所示。

非阻塞的實(shí)現(xiàn)是 I/O 命令可能并不會(huì)立即滿足,需要應(yīng)用程序調(diào)用許多次來等待操作完成。這可能效率不高,因?yàn)樵诤芏嗲闆r下,當(dāng)內(nèi)核執(zhí)行這個(gè)命令時(shí),應(yīng)用程序必須要進(jìn)行忙碌等待,直到數(shù)據(jù)可用為止,或者試圖執(zhí)行其他工作。正如圖 3 所示的一樣,這個(gè)方法可以引入 I/O 操作的延時(shí),因?yàn)閿?shù)據(jù)在內(nèi)核中變?yōu)榭捎玫接脩粽{(diào)用 read 返回?cái)?shù)據(jù)之間存在一定的間隔,這會(huì)導(dǎo)致整體數(shù)據(jù)吞吐量的降低。

異步阻塞 I/O:

另外一個(gè)阻塞解決方案是帶有阻塞通知的非阻塞 I/O。在這種模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系統(tǒng)調(diào)用來確定一個(gè) I/O 描述符何時(shí)有操作。使 select 調(diào)用非常有趣的是它可以用來為多個(gè)描述符提供通知,而不僅僅為一個(gè)描述符提供通知。對(duì)于每個(gè)提示符來說,我們可以請(qǐng)求這個(gè)描述符可以寫數(shù)據(jù)、有讀數(shù)據(jù)可用以及是否發(fā)生錯(cuò)誤的通知。

select 調(diào)用的主要問題是它的效率不是非常高。盡管這是異步通知使用的一種方便模型,但是對(duì)于高性能的 I/O 操作來說不建議使用。

異步非阻塞 I/O(AIO):

最后,異步非阻塞 I/O 模型是一種處理與 I/O 重疊進(jìn)行的模型。讀請(qǐng)求會(huì)立即返回,說明 read 請(qǐng)求已經(jīng)成功發(fā)起了。在后臺(tái)完成讀操作時(shí),應(yīng)用程序然后會(huì)執(zhí)行其他處理操作。當(dāng) read 的響應(yīng)到達(dá)時(shí),就會(huì)產(chǎn)生一個(gè)信號(hào)或執(zhí)行一個(gè)基于線程的回調(diào)函數(shù)來完成這次 I/O 處理過程。

在一個(gè)進(jìn)程中為了執(zhí)行多個(gè) I/O 請(qǐng)求而對(duì)計(jì)算操作和 I/O 處理進(jìn)行重疊處理的能力利用了處理速度與 I/O 速度之間的差異。當(dāng)一個(gè)或多個(gè) I/O 請(qǐng)求掛起時(shí),CPU 可以執(zhí)行其他任務(wù);或者更為常見的是,在發(fā)起其他 I/O 的同時(shí)對(duì)已經(jīng)完成的 I/O 進(jìn)行操作。

3異步 I/O(AIO) 的動(dòng)機(jī)

從前面 I/O 模型的分類中,我們可以看出 AIO 的動(dòng)機(jī)。這種阻塞模型需要在 I/O 操作開始時(shí)阻塞應(yīng)用程序。這意味著不可能同時(shí)重疊進(jìn)行處理和 I/O 操作。同步非阻塞模型允許處理和 I/O 操作重疊進(jìn)行,但是這需要應(yīng)用程序根據(jù)重現(xiàn)的規(guī)則來檢查 I/O 操作的狀態(tài)。這樣就剩下異步非阻塞 I/O 了,它允許處理和 I/O 操作重疊進(jìn)行,包括 I/O 操作完成的通知。

除了需要阻塞之外,select 函數(shù)所提供的功能(異步阻塞 I/O)與 AIO 類似。不過,它是對(duì)通知事件進(jìn)行阻塞,而不是對(duì) I/O 調(diào)用進(jìn)行阻塞。

總結(jié)

使用異步 I/O(AIO)可以幫助我們構(gòu)建 I/O 速度更快、效率更高的應(yīng)用程序。如果我們的應(yīng)用程序可以對(duì)處理和 I/O 操作重疊進(jìn)行,那么 AIO 就可以幫助我們構(gòu)建可以更高效地使用可用 CPU 資源的應(yīng)用程序。

盡管這種 I/O 模型與在大部分 Linux 應(yīng)用程序中使用的傳統(tǒng)阻塞模式都不同,但是異步通知模型在概念上來說卻非常簡單,可以簡化我們的設(shè)計(jì)。

?

?

?

?

?

?

?

?

?

?

?

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久国产综合 | 国产欧美日韩精品一区 | 99re在线| 自宅警备员在线观看 | 国产亚洲精品一区二区三区 | 天天色天天射天天干 | 亚洲AV成人无码电影在线观看 | 欧美激情综合色综合啪啪五月 | 午夜av免费 | 男人插入女人阴道视频 | 成人久久久精品乱码一区二区三区 | 日本一区二区三区欧美 | 美女被草出白浆 | a极毛片| 一区二区三区免费观看 | 日韩精品一区二区三区国语自制 | 久久综合婷婷国产二区高清 | 午夜在线不卡 | 日本少妇性高潮 | 久久久国产片 | 性视频黄色| 国产aaa毛片 | 精品一区在线播放 | 国产精品二区在线 | 91小视频在线观看 | av色在线观看 | 日本电影一区二区三区 | 国产精品国产三级国产专区53 | 国产又黄又猛视频 | 天天av天天干 | 国产91在线观看丝袜 | 丰满岳乱妇一区二区三区 | 天天碰天天干 | 插吧插吧网 | 黄色成人在线观看 | 漂亮人妻洗澡被公强 日日躁 | 日韩有码第一页 | 国产日产精品一区二区三区 | 久久午夜国产精品 | 亚洲熟妇无码av在线播放 | 黑人巨大精品欧美一区二区蜜桃 | 人人插人人 | 第四色激情 | av 一区二区三区 | 4388成人网 | 日本护士做爰视频 | 日韩大胆视频 | 初音未来打屁股 | 国产男女精品 | youjizzxxx69 | 亚洲国产精品99久久 | 久久av片| 久久婷婷网 | 国产资源在线视频 | 侵犯亲女在线播放视频 | 久久调教视频 | 欧美不在线| 日日操夜夜操狠狠操 | 最新中文字幕av专区 | 精品视频无码一区二区三区 | 光明影院手机版在线观看免费 | 亚洲永久无码精品一区二区 | 清清草在线视频 | 免费无遮挡无码永久视频 | 中文视频在线 | 中文字幕免费观看 | 欧美大尺度床戏做爰 | 激情视频一区二区三区 | 亚洲欧美一区二区在线观看 | 久久精品无码一区二区三区毛片 | 久久妇女 | 国产综合婷婷 | 日本视频黄| 成人黄色录像 | 精品亚洲中文字幕 | 五月婷婷六月激情 | 在线观看欧美日韩 | 青草久久久 | 久久婷婷五月综合色国产香蕉 | 视频在线观看免费 | 男生和女生靠逼视频 | 久久性爱视频网站 | 欧美91看片特黄aaaa | 国模私拍一区二区 | 亚洲欲色| 国产午夜成人久久无码一区二区 | 日韩av片在线播放 | 岛国av网址 | 黄色片aa | 麻豆视屏 | 日日碰狠狠添天天爽 | 精品网站999 | 亚洲一区二区三区91 | 91视频在| 亚洲AV无码片久久精品 | 97精品| 日韩成人免费在线视频 | 黄色国产在线播放 | 亚洲AV无码国产精品午夜字幕 |