日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

5種IO模型的圖解分析和比較

系統(tǒng) 2690 0

Unix 5 IO 模型的圖解分析和比較

(轉(zhuǎn)自 http://blog.csdn.net/blueboy2000/archive/2009/08/26/4485874.aspx

Unix 下共有五種 I/O 模型

l ????????? 阻塞 I/O

l ????????? 非阻塞 I/O

l ????????? I/O 復(fù)用( select poll

l ????????? 信號(hào)驅(qū)動(dòng) I/O SIGIO

l ????????? 異步 I/O Posix.1 aio_ 系列函數(shù))



l ?????????
阻塞 I/O 模型

應(yīng)用程序調(diào)用一個(gè) IO 函數(shù),導(dǎo)致應(yīng)用程序阻塞,等待數(shù)據(jù)準(zhǔn)備好。

如果數(shù)據(jù)沒(méi)有準(zhǔn)備好,一直等待。。。。

數(shù)據(jù)準(zhǔn)備好了,從內(nèi)核拷貝到用戶空, IO 函數(shù)返回成功指示。

在這種模式下,基本上 IO 操作都會(huì)用一個(gè) Work Thread 來(lái)進(jìn)行( Java )。

?

5種IO模型的圖解分析和比較



l ????????? 非阻塞 I/O 模型

我們把一個(gè)套接口設(shè)置為非阻塞就是告訴內(nèi)核,當(dāng)所請(qǐng)求的 I/O 操作無(wú)法完成時(shí),不要將進(jìn)程睡眠,而是返回一個(gè)錯(cuò)誤。這樣我們的 I/O 操作函數(shù)將不斷的測(cè)試數(shù)據(jù)是否已經(jīng)準(zhǔn)備好,如果沒(méi)有準(zhǔn)備好,繼續(xù)測(cè)試,直到數(shù)據(jù)準(zhǔn)備好為止。在這個(gè)不斷測(cè)試的過(guò)程中,會(huì)大量的占用 CPU 的時(shí)間。

5種IO模型的圖解分析和比較


l ?????????
I/O 復(fù)用模型

I/O 復(fù)用模型會(huì)用到 select 或者 poll 函數(shù),這兩個(gè)函數(shù)也會(huì)使進(jìn)程阻塞,但是和阻塞 I/O 所不同的是,這兩個(gè)函數(shù)可以同時(shí)阻塞多個(gè) I/O 操作。而且可以同時(shí)對(duì)多個(gè)讀操作,多個(gè)寫操作的 I/O 函數(shù)進(jìn)行檢測(cè),直到有數(shù)據(jù)可讀或可寫時(shí),才真正調(diào)用 I/O 操作函數(shù)。

5種IO模型的圖解分析和比較

目前Java 只能支持到多路復(fù)用一級(jí),在這種模式下,在一個(gè)線程里面以阻塞的模式監(jiān)聽連接,優(yōu)點(diǎn)在于不用開過(guò)多的線程以阻塞的模式等待連接。



l ????????? 信號(hào)驅(qū)動(dòng) I/O 模型

?

首先我們?cè)试S套接口進(jìn)行信號(hào)驅(qū)動(dòng) I/O, 并安裝一個(gè)信號(hào)處理函數(shù),進(jìn)程繼續(xù)運(yùn)行并不阻塞。當(dāng)數(shù)據(jù)準(zhǔn)備好時(shí),進(jìn)程會(huì)收到一個(gè) SIGIO 信號(hào),可以在信號(hào)處理函數(shù)中調(diào)用 I/O 操作函數(shù)處理數(shù)據(jù)。

5種IO模型的圖解分析和比較

l ?????????
異步 I/O 模型

調(diào)用 aio_read 函數(shù),告訴內(nèi)核描述字,緩沖區(qū)指針,緩沖區(qū)大小,文件偏移以及通知的方式,然后立即返回。當(dāng) 內(nèi)核 將數(shù)據(jù)拷貝到緩沖區(qū)后,再通知應(yīng)用程序。

這個(gè)操作和信號(hào)驅(qū)動(dòng)的區(qū)別就是:異步模式等操作完畢后才通知用戶程序而信號(hào)驅(qū)動(dòng)模式在數(shù)據(jù)到來(lái)時(shí)就通知用戶程序。

5種IO模型的圖解分析和比較

幾種
I/O 模型的比較

前四種模型的區(qū)別是第一階段,第二階段基本相同,都是將數(shù)據(jù)從內(nèi)核拷貝到調(diào)用者的緩沖區(qū)。而異步 I/O 的兩個(gè)階段都不同于前四個(gè)模型。

5種IO模型的圖解分析和比較


同步
I/O 和異步 I/O

a. 同步 I/O 操作引起請(qǐng)求進(jìn)程阻塞,直到 I/O 操作完成。異步 I/O 操作不引起請(qǐng)求進(jìn)程阻塞。

b. 我們的前四個(gè)模型都是同步 I/O ,只有最后一個(gè)異步 I/O 模型是異步 I/O

Java nio 和多路復(fù)用

java 1.4 nio 提供的 select ,這是一種多路復(fù)用 I/O multiplexed non-blocking I/O )模型,底層是使用 select 或者 poll I/O 復(fù)用就是,阻塞在 select 或者 poll 系統(tǒng)調(diào)用的某一個(gè)之上,而不是阻塞在真正的 I/O 系統(tǒng)調(diào)用之上。 JDK 5.0 update 9 JDK 6.0 linux 下支持使用 epoll ,可以提高并發(fā) idle connection 的性能( http://blogs.sun.com/alanb/entry/epoll )。

"BIO是指阻塞IO方式,即讀和寫必須為同步方式,NIO是指異步讀,同步寫的方式,AIO是指異步讀,異步寫的方式。
在網(wǎng)絡(luò)協(xié)議上java對(duì)于TCP/IP和UDP/IP均支持,在網(wǎng)絡(luò)IO的操作上,目前java僅支持BIO和NIO兩種方式。"

5種IO模型的圖解分析和比較


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 和顺县| 比如县| 平湖市| 花垣县| 丰镇市| 辽阳市| 栖霞市| 东丰县| 廊坊市| 明光市| 洮南市| 西青区| 五寨县| 贵南县| 文登市| 高碑店市| 陆川县| 耿马| 富顺县| 务川| 吉安市| 越西县| 五家渠市| 华安县| 梧州市| 香格里拉县| 饶阳县| 肃宁县| 太白县| 盐池县| 错那县| 文昌市| 抚远县| 讷河市| 孙吴县| 新兴县| 兴化市| 乌兰察布市| 竹北市| 新龙县| 崇仁县|