5種網(wǎng)絡(luò)I/O模型-創(chuàng)新互聯(lián)

IO發(fā)生時(shí)涉及的對(duì)象和步驟:

臨海網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),臨海網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為臨海上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的臨海做網(wǎng)站的公司定做!

對(duì)象:

對(duì)于一個(gè)網(wǎng)絡(luò)IO,涉及到了兩個(gè)對(duì)象,一個(gè)是進(jìn)程,另一個(gè)是系統(tǒng)內(nèi)核。當(dāng)一個(gè)read發(fā)生時(shí),會(huì)進(jìn)行一下步驟

步驟:

  1. 數(shù)據(jù)的準(zhǔn)備(即等待)

  2. 將數(shù)據(jù)從內(nèi)核拷貝到應(yīng)用進(jìn)程中

幾種I/O模型的區(qū)別一般就在以上兩個(gè)階段有所不同

下面介紹了5種不同的I/O模型:

阻塞IO

非阻塞IO

多路復(fù)用IO

信號(hào)驅(qū)動(dòng)IO

異步IO

以上5中IO中,前4種為同步IO,第5種為異步IO

1. 阻塞IO

 在linux中,默認(rèn)的socket都是阻塞的

 一個(gè)典型的讀操作的流程大概是這樣的:

 當(dāng)用戶(hù)進(jìn)程調(diào)用recv/recvfrom系統(tǒng)調(diào)用時(shí),會(huì)檢查內(nèi)核接收緩沖區(qū)是否準(zhǔn)備好了數(shù)據(jù),對(duì)于網(wǎng)絡(luò)IO 來(lái)說(shuō),很多時(shí)候數(shù)據(jù)在一開(kāi)始的時(shí)候還沒(méi)有到達(dá),所以進(jìn)程會(huì)阻塞等待,直到內(nèi)核緩沖區(qū)數(shù)據(jù)準(zhǔn)備好了(對(duì)UDP來(lái)說(shuō)要收到一個(gè)完整的數(shù)據(jù)報(bào)),內(nèi)核就把數(shù)據(jù)拷貝到用戶(hù)緩沖區(qū),然后內(nèi)核返回結(jié)果。

   所以,阻塞IO的特點(diǎn)就是在IO執(zhí)行的兩個(gè)階段都被block了

2.非阻塞IO

 在linux中,socket可以通過(guò)參數(shù)被設(shè)置為非阻塞的

 同樣,一個(gè)典型的阻塞讀操作的流程大是這樣的:

 當(dāng)調(diào)用recv/recvfrom系統(tǒng)調(diào)用時(shí),檢查內(nèi)核是否準(zhǔn)備好了數(shù)據(jù),如果沒(méi)有就直接返回一個(gè)error,并 不會(huì)阻塞等待數(shù)據(jù),用戶(hù)可以循環(huán)調(diào)用recv/recvfrom,這樣的話(huà),如果內(nèi)核一直沒(méi)有準(zhǔn)備好數(shù)據(jù), 函數(shù)就會(huì)一直返回一個(gè)error,直到數(shù)據(jù)準(zhǔn)備好,才會(huì)把數(shù)據(jù)拷貝到用戶(hù)緩沖區(qū),并返回

   所以,用戶(hù)進(jìn)程其實(shí)是需要不斷的主動(dòng)詢(xún)問(wèn)內(nèi)核數(shù)據(jù)好了沒(méi)有。

3. 多路復(fù)用IO

 系統(tǒng)提供select函數(shù)和epoll來(lái)實(shí)現(xiàn)多路復(fù)用輸入/輸出模型,select/epoll可以用單個(gè)進(jìn)程來(lái)處理多個(gè)網(wǎng)絡(luò)接口的IO,它的基本原理就是這兩個(gè)函數(shù)會(huì)不斷的輪詢(xún)它所負(fù)責(zé)的所有socket,當(dāng)有任何一個(gè)  socket收到數(shù)據(jù)就會(huì)返回通知用戶(hù),此時(shí)用戶(hù)調(diào)用recv/recvfrom,將數(shù)據(jù)從內(nèi)核拷貝到用戶(hù)內(nèi)存用戶(hù)進(jìn)程其實(shí)也是一直被阻塞的,但和阻塞IO不同,該方式是select函數(shù)進(jìn)行阻塞,而阻塞IO是recv函數(shù)進(jìn)行阻塞,另外,select的優(yōu)勢(shì)是可以同時(shí)處理多個(gè)連接

4. 信號(hào)驅(qū)動(dòng)IO

 使用信號(hào)驅(qū)動(dòng)I/O時(shí),當(dāng)網(wǎng)絡(luò)套接字可讀后,內(nèi)核通過(guò)發(fā)送SIGIO信號(hào)通知應(yīng)用進(jìn)程,于是應(yīng)用可以開(kāi) 始讀取數(shù)據(jù)。該方式并不是異步I/O,因?yàn)閷?shí)際讀取數(shù)據(jù)到應(yīng)用進(jìn)程緩存的工作仍然是由應(yīng)用自己負(fù)責(zé)的。

5. 異步IO

 當(dāng)用戶(hù)進(jìn)程發(fā)起一個(gè)read操作后,內(nèi)核收到該read操作后,首先它會(huì)立刻返回,所以不會(huì)對(duì)用戶(hù)進(jìn)程 阻塞,然后它會(huì)等待數(shù)據(jù)的準(zhǔn)備完成,再把數(shù)據(jù)拷貝到用戶(hù)內(nèi)存,完成之后,它會(huì)給用戶(hù)進(jìn)程發(fā)送一個(gè)信號(hào),告訴用戶(hù)進(jìn)程read操作完成了

下面來(lái)思考這兩個(gè)問(wèn)題:

1.阻塞IO與非阻塞IO的區(qū)別:

調(diào)用阻塞IO的時(shí)候進(jìn)程會(huì)一直阻塞直到數(shù)據(jù)準(zhǔn)備好,并且拷貝完成才解除阻塞

而非阻塞IO不會(huì)阻塞對(duì)應(yīng)進(jìn)程,盡管數(shù)據(jù)還沒(méi)準(zhǔn)備好,也會(huì)立刻返回

2.同步IO與異步IO的區(qū)別:

兩者的區(qū)別在于,同步IO在IO操作的時(shí)候會(huì)阻塞,這里的IO操作是真正意義上的IO操作,也就是非阻塞IO中的recv/recvfrom系統(tǒng)調(diào)用,當(dāng)內(nèi)核準(zhǔn)備好數(shù)據(jù)后,recvfrom會(huì)將數(shù)據(jù)從內(nèi)核拷貝到用戶(hù)中,這段時(shí)間內(nèi),進(jìn)程是被阻塞的。

而異步IO則不一樣,當(dāng)進(jìn)程發(fā)起IO操作后,就直接返回,剩下的工作全部交給內(nèi)核來(lái)完成,知道內(nèi)核給用戶(hù)進(jìn)程發(fā)送一個(gè)信號(hào)告訴它IO完成,整個(gè)過(guò)程中進(jìn)程沒(méi)有被阻塞

非阻塞IO和異步IO:

在非阻塞IO中,雖然進(jìn)程大部分時(shí)間都不會(huì)被阻塞i,但是它仍然要求進(jìn)程去主動(dòng)的check,并且當(dāng)數(shù)據(jù)準(zhǔn)備完成以后,也需要進(jìn)程主動(dòng)的再次調(diào)用recvfrom來(lái)將數(shù)據(jù)拷貝到用戶(hù)內(nèi)存。而異步IO則完全不同。它就像是用戶(hù)進(jìn)程將整個(gè)IO操作交給了他人(內(nèi)核)完成,然后他人做完后發(fā)信號(hào)通知。在此期間,用戶(hù)進(jìn)程不需要去檢查IO操作的狀態(tài),也不需要主動(dòng)的去拷貝數(shù)據(jù)。

《完》

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱(chēng):5種網(wǎng)絡(luò)I/O模型-創(chuàng)新互聯(lián)
瀏覽路徑:http://bm7419.com/article32/dseosc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化網(wǎng)站制作、網(wǎng)站收錄、品牌網(wǎng)站制作標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)