真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

一.概述:

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比正安網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式正安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋正安地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

在網(wǎng)絡(luò)編程中,阻塞、非阻塞、同步、異步經(jīng)常被提到,下面我先談以下我所理解的在I/O中的阻塞、非阻塞、同步、異步。

五種I/O模型分別是阻塞式I/O,非阻塞式I/O,信號(hào)驅(qū)動(dòng),I/O復(fù)用(這四種是同步I/O),異步I/O。

我來(lái)舉一個(gè)例子來(lái)解釋這五種I/O模型:

有A,B,C,D,E五個(gè)人在釣魚(yú):
A用的是最老式的魚(yú)竿,所以呢,得一直守著,等到魚(yú)上鉤了再拉桿。(阻塞式I/O)

B呢,它的魚(yú)竿比較新,不怕魚(yú)上鉤后把魚(yú)竿拽走,所以他一邊看手機(jī),一邊時(shí)不時(shí)看一下魚(yú)竿是否有魚(yú)上鉤,有的話就迅速拉魚(yú)竿。(非阻塞式I/O)

C的魚(yú)竿有個(gè)功能,能夠顯示是否有魚(yú)上鉤,所以呢,B就和旁邊的MM聊天,隔會(huì)再看看有沒(méi)有魚(yú)上鉤,有的話就迅速拉桿。(信號(hào)驅(qū)動(dòng))

D用的魚(yú)竿和C差不多,但他想了一個(gè)好辦法,就是同時(shí)放好幾根魚(yú)竿,然后守在旁邊,一旦有顯示說(shuō)魚(yú)上鉤了,它就將對(duì)應(yīng)的魚(yú)竿拉起來(lái);(I/O復(fù)用)

E是個(gè)有錢人(有錢人了不起?。?,干脆雇了一個(gè)人幫他釣魚(yú),一旦那個(gè)人把魚(yú)釣上來(lái)了,就給E發(fā)個(gè)短信。(異步I/O)

下面我先談以下我所理解的在I/O中的阻塞、非阻塞、同步、異步。


二.I/O操作過(guò)程:

首先,進(jìn)行I/O操作涉及到了硬件,所以就會(huì)和操作系統(tǒng)打交道。(從網(wǎng)卡這兩個(gè)讀取/發(fā)送數(shù)據(jù)到網(wǎng)絡(luò)中是操作系統(tǒng)做的)所以,先解釋以下我理解的I/O過(guò)程(總的來(lái)說(shuō)是  等數(shù)據(jù) 和 數(shù)據(jù)搬遷  這兩個(gè)過(guò)程)

首先,通過(guò)系統(tǒng)給我們的API函數(shù)調(diào)用I/O操作(此時(shí)在用戶態(tài)),這個(gè)函數(shù)先等待I/O緩存中有數(shù)據(jù),操作系統(tǒng)會(huì)監(jiān)測(cè)I/O緩存(此時(shí)在內(nèi)核態(tài)),當(dāng)I/O緩存中接收到數(shù)據(jù)時(shí),操作系統(tǒng)先通知這個(gè)函數(shù)調(diào)用(進(jìn)入用戶態(tài)),然后這個(gè)函數(shù)的實(shí)現(xiàn)中會(huì)調(diào)用一些已經(jīng)包裝好的函數(shù),“ 這些 ”函數(shù)會(huì)把數(shù)據(jù)從內(nèi)核中拷貝到用戶緩存區(qū)(先到內(nèi)核態(tài),再到用戶態(tài)),然后這個(gè)函數(shù)就會(huì)返回。

具體如下圖:

網(wǎng)絡(luò)編程之五種I/O模型


三.I/O操作中的阻塞、非阻塞、同步、異步:

(1).同步:同步就是在一個(gè)功能調(diào)用時(shí),在這個(gè)調(diào)用沒(méi)有得到結(jié)果之前,這個(gè)調(diào)用不會(huì)返回。(在I/O操作中,如調(diào)用read函數(shù),這個(gè)函數(shù)會(huì)被阻塞在read函數(shù)調(diào)用處,但內(nèi)核一直在做與read相關(guān)的事情,也就是這個(gè)函數(shù)是激活的(會(huì)占用cpu),只是從表面上看函數(shù)還沒(méi)有返回而已)。

(2).阻塞:阻塞調(diào)用就是調(diào)用一個(gè)函數(shù),這個(gè)調(diào)用結(jié)果沒(méi)有得到結(jié)果之前,執(zhí)行這個(gè)函數(shù)的線程會(huì)被掛起(這個(gè)狀態(tài)下,cpu不會(huì)給該函數(shù)分配時(shí)間片),直到得到結(jié)果后才返回。

(3).非阻塞:是指如果一個(gè)函數(shù)不能立刻得到結(jié)果,這個(gè)函數(shù)不會(huì)阻塞該線程而立即返回。

(4).異步:是指在一個(gè)功能調(diào)用時(shí),這個(gè)調(diào)用不會(huì)立即得到結(jié)果,也不會(huì)阻塞該線程,這個(gè)調(diào)用所在的線程會(huì)繼續(xù)執(zhí)行其它事情,而這個(gè)功能是由其它執(zhí)行部件來(lái)完成,當(dāng)這個(gè)部件執(zhí)行完該功能時(shí),通過(guò)狀態(tài),通知來(lái)通知調(diào)用者,或通過(guò)回調(diào)函數(shù)處理這個(gè)調(diào)用。

執(zhí)行部件和調(diào)用者可以通過(guò)三種途徑返回結(jié)果:
a.  狀態(tài)、
b.  通知、
c.  回調(diào)函數(shù)。
使用哪一種依賴于執(zhí)行部件的實(shí)現(xiàn),除非執(zhí)行部件提供多種選擇,否則不受調(diào)用者控制。

a. 如果執(zhí)行部件用狀態(tài)來(lái)通知,
  那么調(diào)用者就需要每隔一定時(shí)間檢查一次,效率就很低

b. 如果是使用通知的方式,
  效率則很高,因?yàn)閳?zhí)行部件幾乎不需要做額外的操作。

c. 至于回調(diào)函數(shù),
  和通知沒(méi)太多區(qū)別。


四.五種I/O模型:(理解了上面的知識(shí),下面應(yīng)該比較容易理解了)

(1).阻塞式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ù)返回成功指示。

如下圖:

網(wǎng)絡(luò)編程之五種I/O模型

(2).非阻塞式I/O:

在非阻塞I/O中,一定要把一個(gè)I/O操作函數(shù)放在一個(gè)死循環(huán)中,直到這個(gè)I/O函數(shù)返回一個(gè)正確值時(shí)才跳出這個(gè)循環(huán)。

我們把一個(gè)SOCKET接口設(shè)置為非阻塞就是告訴內(nèi)核,當(dāng)所請(qǐng)求的I/O操作無(wú)法完成時(shí),不要將線程睡眠,而是返回一個(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í)間。

如下圖:

網(wǎng)絡(luò)編程之五種I/O模型

(3).信號(hào)驅(qū)動(dòng):

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

如下圖:

網(wǎng)絡(luò)編程之五種I/O模型

(4).I/O復(fù)用:

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è)寫操作的I/O函數(shù)進(jìn)行檢測(cè),直到有數(shù)據(jù)可讀或可寫時(shí),才真正調(diào)用I/O操作函數(shù)。(比阻塞式I/O并沒(méi)有上面優(yōu)越性,但它實(shí)現(xiàn)了對(duì)多個(gè)I/O端口的監(jiān)聽(tīng))

如下圖:

網(wǎng)絡(luò)編程之五種I/O模型

(5).異步I/O:

當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者不能立刻得到結(jié)果。實(shí)際處理這個(gè)調(diào)用的部件在完成后,通過(guò)狀態(tài)、通知和回調(diào)來(lái)通知調(diào)用者的輸入輸出操作。

如下圖:

網(wǎng)絡(luò)編程之五種I/O模型


六.五種I/O模型比較:

網(wǎng)絡(luò)編程之五種I/O模型


七.總結(jié):

理解五種I/O模型應(yīng)該先理解I/O操作過(guò)程,并理解阻塞,非阻塞,同步,異步的一些知識(shí)。

I/O操作要和硬件打交道,所以會(huì)I/O操作過(guò)程會(huì)涉及到操作系統(tǒng)。

處理I/O操作分為兩個(gè)過(guò)程,一是等待數(shù)據(jù),二是把數(shù)據(jù)從內(nèi)核中搬到用戶空間。

這五中I/O模型的不同之處是在等待數(shù)據(jù)的方式上,在第二個(gè)過(guò)程中是一樣的,都是把數(shù)據(jù)從內(nèi)核中搬到用戶空間,然后進(jìn)行相關(guān)操作。

另外有需要云服務(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ù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前標(biāo)題:網(wǎng)絡(luò)編程之五種I/O模型-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://weahome.cn/article/pcjhc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部