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

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

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

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

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

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

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

上面這幾種情況說的通俗點就是下面這幾種情況:

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

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

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

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

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

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

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

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

有了上面的理解,我們再分別看看以下的五種I/O模型:

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

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

五種I/O模型簡述

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

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

我們來看看非阻塞式I/O模型圖:

五種I/O模型簡述

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

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

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

五種I/O模型簡述

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

      4.信號驅(qū)動式I/O模型:兩次調(diào)用,兩次返回。首先我們允許套接口進行信號驅(qū)動I/O,并安裝一個信號處理函數(shù),進程繼續(xù)運行并不阻塞。當數(shù)據(jù)準備好時,進程會收到一個SIGIO信號,可以在信號處理函數(shù)中調(diào)用I/O操作函數(shù)處理數(shù)據(jù)。模型圖如下:

五種I/O模型簡述

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

五種I/O模型簡述

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

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

五種I/O模型簡述

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

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

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

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

廣告

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

小程序開發(fā)