内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

五種I/O模型簡(jiǎn)述-創(chuàng)新互聯(lián)

在說(shuō)I/O模型之前,我們先來(lái)說(shuō)說(shuō)同步,異步,阻塞,非阻塞這四種調(diào)用方式的概念:

目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、小店網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

      同步:在發(fā)出一個(gè)功能調(diào)用時(shí),在沒(méi)有得到結(jié)果之前,該調(diào)用就不返回,通俗點(diǎn)就是必須一件一件的做事,等這件事做完了才能做下一件事;

      異步:異步和同步正好相對(duì),當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者不能立即得到結(jié)果,當(dāng)該異步調(diào)用完成后,通過(guò)狀態(tài),通知和回調(diào)來(lái)通知調(diào)用者。

      阻塞:阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前線程會(huì)被掛起(線程進(jìn)入非可執(zhí)行狀態(tài),在這個(gè)狀態(tài)之下,cpu不會(huì)給線程分配時(shí)間片,即線程暫停運(yùn)行),函數(shù)只有在得到結(jié)果之后才會(huì)返回。

       非阻塞:指我們的調(diào)用在不能立即得到結(jié)果之前,該函數(shù)不會(huì)阻塞當(dāng)前線程,而會(huì)立即返回。

上面這幾種情況說(shuō)的通俗點(diǎn)就是下面這幾種情況:

       同步:就是我調(diào)用一個(gè)功能,該功能沒(méi)有結(jié)束前,我就什么也不干,死等結(jié)果;

       異步:就是我調(diào)用一個(gè)功能,不需要知道該功能結(jié)果,該功能有結(jié)果后通知我(回調(diào)通知);

       阻塞:就是調(diào)用一個(gè)功能,該功能沒(méi)有得到結(jié)果或接受完數(shù)據(jù)之前,該功能不會(huì)返回;

       非阻塞:就是調(diào)用一個(gè)功能,該功能立即返回,通過(guò)select通知調(diào)用者;

同步IO和異步IO的區(qū)別:數(shù)據(jù)拷貝的時(shí)候,進(jìn)程是否阻塞;

阻塞IO和非阻塞IO的區(qū)別:應(yīng)用程序的調(diào)用是否立即返回。

我們來(lái)總結(jié)一下:

      同步就是當(dāng)一個(gè)進(jìn)程發(fā)起一個(gè)函數(shù)(任務(wù))調(diào)用的時(shí)候,一直等待直到函數(shù)(任務(wù))完成,而進(jìn)程繼續(xù)處于激活狀態(tài)。而異步情況下是當(dāng)一個(gè)進(jìn)程發(fā)起一個(gè)函數(shù)(任務(wù))調(diào)用的時(shí)候,不會(huì)等函數(shù)返回,而是繼續(xù)往下執(zhí)行,當(dāng)函數(shù)返回的時(shí)候,通過(guò)狀態(tài),通知,事件等方式通知進(jìn)程任務(wù)完成。阻塞是當(dāng)請(qǐng)求不能滿(mǎn)足的時(shí)候,就將進(jìn)程掛起,而非阻塞不會(huì)阻塞當(dāng)前進(jìn)程,即阻塞與非阻塞針對(duì)的是進(jìn)程或線程,而同步與異步針對(duì)的是功能函數(shù)。

有了上面的理解,我們?cè)俜謩e看看以下的五種I/O模型:

     1.阻塞式I/O模型:進(jìn)程會(huì)一直阻塞,直到數(shù)據(jù)拷貝完成。應(yīng)用進(jìn)程調(diào)用一個(gè)I/O函數(shù),導(dǎo)致應(yīng)用進(jìn)程阻塞,等待數(shù)據(jù)準(zhǔn)備好,如果數(shù)據(jù)沒(méi)有準(zhǔn)備好,則一直等待,直到數(shù)據(jù)準(zhǔn)備好了,從內(nèi)核拷貝到用戶(hù)空間,I/O函數(shù)函數(shù)返回成功指示。

下面我們來(lái)看看阻塞式I/O模型圖,在調(diào)用recvfrom函數(shù)時(shí),發(fā)生在內(nèi)核中等待數(shù)據(jù)和復(fù)制數(shù)據(jù)的過(guò)程:

五種I/O模型簡(jiǎn)述

      當(dāng)調(diào)用recvfrom函數(shù)時(shí),系統(tǒng)首先檢查是否有數(shù)據(jù)準(zhǔn)備好,如果數(shù)據(jù)沒(méi)有準(zhǔn)備好,那么系統(tǒng)就處于等待狀態(tài),當(dāng)數(shù)據(jù)準(zhǔn)備好之后,將數(shù)據(jù)從系統(tǒng)緩沖區(qū)復(fù)制到用戶(hù)空間,然后改函數(shù)返回。在套接字應(yīng)用程序中,當(dāng)調(diào)用recvfrom函數(shù)時(shí),未必用戶(hù)空間就已經(jīng)存在數(shù)據(jù),那么此時(shí)recvfrom函數(shù)就會(huì)處于等待狀態(tài)。

     2.非阻塞式I/O模型:非阻塞式I/O通過(guò)進(jìn)程反復(fù)調(diào)用IO函數(shù)(多次系統(tǒng)調(diào)用,并馬上返回),在數(shù)據(jù)拷貝的過(guò)程中,進(jìn)程是阻塞的。我們把一個(gè)socket接口設(shè)置為非阻塞就是告訴內(nèi)核,當(dāng)所請(qǐng)求的O操作無(wú)法完成時(shí),不要將進(jìn)程睡眠,而是返回一個(gè)錯(cuò)誤。這樣,我們的IO函數(shù)將不斷地測(cè)試數(shù)據(jù)是否已經(jīng)準(zhǔn)備好,如果沒(méi)有準(zhǔn)備好,繼續(xù)測(cè)試,知道數(shù)據(jù)準(zhǔn)備好為止。在不斷地測(cè)試中,會(huì)占用CPU大量的時(shí)間。

我們來(lái)看看非阻塞式I/O模型圖:

五種I/O模型簡(jiǎn)述

      把socket設(shè)置為非阻塞模式,就是在通知內(nèi)核:在調(diào)用socket API函數(shù)時(shí),不要讓線程睡眠,而是讓函數(shù)立即返回,在返回時(shí),該函數(shù)返回一個(gè)錯(cuò)誤代碼。如上圖所示,一個(gè)非阻塞式套接字多次調(diào)用recvfrom函數(shù)時(shí),前三次調(diào)用該函數(shù)時(shí),內(nèi)核內(nèi)核數(shù)據(jù)還沒(méi)有準(zhǔn)備好,該函數(shù)立即返回EWOULDBLOCK錯(cuò)誤代碼。第四次調(diào)用recvfrom時(shí),數(shù)據(jù)已經(jīng)準(zhǔn)備好,被復(fù)制到應(yīng)用程序的緩沖區(qū)中,recvfrom函數(shù)返回成功指示,應(yīng)用程序開(kāi)始處理數(shù)據(jù)。

      3.I/O復(fù)用模型:主要是select或poll,對(duì)一個(gè)端口兩次調(diào)用,兩次返回,比阻塞I/O并沒(méi)有什么優(yōu)越性,關(guān)鍵是能夠?qū)崿F(xiàn)同時(shí)對(duì)多個(gè)IO端口進(jìn)行監(jiān)聽(tīng)。I/O復(fù)用模型會(huì)用到select,poll,epoll函數(shù),這幾個(gè)函數(shù)也會(huì)使進(jìn)程阻塞,但是和阻塞I/O不同的是這兩個(gè)函數(shù)可以同時(shí)阻塞多個(gè)I/O操作。而且可以同時(shí)對(duì)多個(gè)讀操作,多個(gè)寫(xiě)操作的I/O函數(shù)進(jìn)行檢測(cè),直到有數(shù)據(jù)可讀或可寫(xiě)時(shí),才真正調(diào)用I/O操作函數(shù)。

我們來(lái)看看I/O復(fù)用模型圖:

五種I/O模型簡(jiǎn)述

      從上圖可以看到,我們阻塞于select調(diào)用,等待數(shù)據(jù)寶套接字變?yōu)榭勺x。當(dāng)select返回套接字可讀這一條件時(shí),我們調(diào)用recvfrom把所讀數(shù)據(jù)報(bào)復(fù)制到應(yīng)用緩沖區(qū)域。

      4.信號(hào)驅(qū)動(dòng)式I/O模型:兩次調(dià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ù)。模型圖如下:

五種I/O模型簡(jiǎn)述

      5.異步I/O模型:數(shù)據(jù)拷貝的時(shí)候,進(jìn)程無(wú)需阻塞。當(dāng)一個(gè)異步調(diào)用過(guò)程發(fā)生后,調(diào)用者不能立刻得到結(jié)果,實(shí)際處理這個(gè)調(diào)用的部件在完成后,通過(guò)狀態(tài),通知和回調(diào)來(lái)通知調(diào)用者的輸入輸出操作。在這里我們調(diào)用aio_read函數(shù)給內(nèi)核傳遞描述符,緩沖區(qū)指針,緩沖區(qū)大小和文件偏移,并告訴內(nèi)核整個(gè)操作完成后,如何通知我們。該系統(tǒng)調(diào)用立即返回,而且在等待I/O完成期間,我們的進(jìn)程不會(huì)被阻塞。當(dāng)內(nèi)核將數(shù)據(jù)拷貝到緩沖區(qū)后,在通知應(yīng)用進(jìn)程。下面是模型圖:

五種I/O模型簡(jiǎn)述

我們來(lái)總結(jié)一下各種I/O模型的比較:

       我們從下圖的比較中可以看到,前四種模型的區(qū)別主要在意第一階段,因?yàn)樗麄兊牡谝浑A段是一樣的:在數(shù)據(jù)從內(nèi)核復(fù)制到進(jìn)程的應(yīng)用緩沖區(qū)期間,進(jìn)程阻塞于recvfrom調(diào)用。而異步I/O模型這兩個(gè)階段都要處理。

五種I/O模型簡(jiǎn)述

我們的前四種模型都屬于同步I/O模型,而第五種模型屬于異步I/O模型。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有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)景需求。

網(wǎng)站欄目:五種I/O模型簡(jiǎn)述-創(chuàng)新互聯(lián)
瀏覽地址:http://m.rwnh.cn/article6/ddsoog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、定制開(kāi)發(fā)、微信小程序搜索引擎優(yōu)化、靜態(tài)網(wǎng)站網(wǎng)站建設(shè)

廣告

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

小程序開(kāi)發(fā)
敦煌市| 沾益县| 西华县| 唐海县| 宁晋县| 屏山县| 吉木萨尔县| 法库县| 雅安市| 蓬安县| 云霄县| 钟山县| 年辖:市辖区| 广昌县| 小金县| 库车县| 永清县| 满洲里市| 大方县| 搜索| 桃园市| 云和县| 英吉沙县| 彭水| 延长县| 安化县| 南雄市| 独山县| 杭锦后旗| 海淀区| 抚顺市| 满城县| 盐边县| 丽江市| 集安市| 城市| 东乡族自治县| 太仓市| 灵川县| 安乡县| 贵港市|