溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么

發(fā)布時(shí)間:2021-12-20 15:54:49 來源:億速云 閱讀:125 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么”吧!

 服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么    

??這張圖比較簡(jiǎn)單,但是很多人在沒看到這張圖之前肯定都以為每次網(wǎng)絡(luò)讀(recvfrom())或者寫(sendto())都是在網(wǎng)卡與用戶進(jìn)程之間進(jìn)行操作,其實(shí)不是。從上圖可以看出,數(shù)據(jù)無論從網(wǎng)卡到用戶空間還是從用戶空間到網(wǎng)卡都需要經(jīng)過內(nèi)核。從磁盤上讀寫數(shù)據(jù)也是如此。所以就有了 mmap 技術(shù),感興趣的可以自行百度。應(yīng)用進(jìn)程(Web 服務(wù)器也屬于應(yīng)用進(jìn)程,這里需要再統(tǒng)一幾個(gè)概念:用戶進(jìn)程、應(yīng)用程序、Web 服務(wù)器程序,它們相對(duì)于內(nèi)核來說都是應(yīng)用進(jìn)程,所以后面文章中統(tǒng)一成應(yīng)用進(jìn)程)需要通過系統(tǒng)調(diào)用(例如recvfrom/sendto)向內(nèi)核讀寫數(shù)據(jù),內(nèi)核再進(jìn)一步操作網(wǎng)卡。

??根據(jù)應(yīng)用進(jìn)程系統(tǒng)調(diào)用方式的阻塞、非阻塞,操作系統(tǒng)在處理應(yīng)用程序請(qǐng)求時(shí)處理方式的同步、異步處理的不同,可以分為 5 種 IO 模型:

1、阻塞 IO 模型(blocking IO)

           服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么     ??

描述:應(yīng)用程序進(jìn)行 recvfrom 系統(tǒng)調(diào)用時(shí)將阻塞在此調(diào)用,直到該套接字上有數(shù)據(jù)并且復(fù)制到用戶空間緩沖區(qū)。該模式一般配合多線程使用,應(yīng)用進(jìn)程每接收一個(gè)連接,為此連接創(chuàng)建一個(gè)線程來處理該連接上的讀寫以及業(yè)務(wù)處理。

??優(yōu)點(diǎn):編程簡(jiǎn)單,適合教學(xué)?!禪NIX網(wǎng)絡(luò)編程卷I》上很多例子都是基于這種模式。 ??缺點(diǎn):如果套接字上沒有數(shù)據(jù),進(jìn)程將一直阻塞。這時(shí)其他套接字上有數(shù)據(jù)也不能進(jìn)行及時(shí)處理。如果是多線程方式,除非連接關(guān)閉否則線程會(huì)一直存在,而線程的創(chuàng)建、維護(hù)和銷毀非常消耗資源,所以能建立的連接數(shù)量非常有限。

2、非阻塞 IO 模型(nonblocking IO)

           服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么     ??

描述:應(yīng)用進(jìn)程每次調(diào)用 recvfrom 即使沒有數(shù)據(jù)準(zhǔn)備好也不會(huì)阻塞,會(huì)繼續(xù)往下執(zhí)行,避免了進(jìn)程阻塞在某個(gè)連接上的弊端。

??優(yōu)點(diǎn):代碼編寫相對(duì)簡(jiǎn)單,進(jìn)程不會(huì)阻塞,可以在同一線程中處理所有連接。

??缺點(diǎn):需要頻繁的輪詢,比較耗CPU,在并發(fā)量很大的時(shí)候?qū)⒒ㄙM(fèi)大量時(shí)間在沒有任何數(shù)據(jù)的連接上輪詢。所以該模型只在專門提供某種功能的系統(tǒng)中才會(huì)出現(xiàn)。

3、IO 復(fù)用模型(IO multiplexing)

           服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么     ??

描述:應(yīng)用進(jìn)程阻塞于 select/poll/epoll 等系統(tǒng)函數(shù)等待某個(gè)連接變成可讀(有數(shù)據(jù)過來),再調(diào)用 recvfrom 從連接上讀取數(shù)據(jù)。雖然此模式也會(huì)阻塞在 select/poll/epoll 上,但與阻塞IO 模型不同它阻塞在等待多個(gè)連接上有讀(寫)事件的發(fā)生,明顯提高了效率且增加了單線程/單進(jìn)程中并行處理多連接的可能。

??優(yōu)點(diǎn):統(tǒng)一管理連接,不一定采用多線程的方式,同時(shí)也不需要輪詢。只需要阻塞于 select 即可,可以同時(shí)管理多個(gè)連接。

??缺點(diǎn):當(dāng) select/poll/epoll 管理的連接數(shù)過少時(shí),這種模型將退化成阻塞 IO 模型。并且還多了一次系統(tǒng)調(diào)用:一次 select/poll/epoll 一次 recvfrom。

4、信號(hào)驅(qū)動(dòng) IO 模型(signal-driven IO)

           服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么     ??

描述:應(yīng)用進(jìn)程創(chuàng)建 SIGIO 信號(hào)處理程序,此程序可處理連接上數(shù)據(jù)的讀寫和業(yè)務(wù)處理。并向操作系統(tǒng)安裝此信號(hào),進(jìn)程可以往下執(zhí)行。當(dāng)內(nèi)核數(shù)據(jù)準(zhǔn)備好會(huì)向應(yīng)用進(jìn)程發(fā)送信號(hào),觸發(fā)信號(hào)處理程序的執(zhí)行。再在信號(hào)處理程序中進(jìn)行 recvfrom 和業(yè)務(wù)處理。

??優(yōu)點(diǎn):非阻塞

??缺點(diǎn):在前一個(gè)通知信號(hào)沒被處理的情況下,后一個(gè)信號(hào)來了也不能被處理。所以在信號(hào)量大的時(shí)候會(huì)導(dǎo)致后面的信號(hào)不能被及時(shí)感知。

5、異步 IO 模型(asynchronous IO)

           服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么     ??

描述:應(yīng)用進(jìn)程通過 aio_read 告知內(nèi)核啟動(dòng)某個(gè)操作,并且在整個(gè)操作完成之后再通知應(yīng)用進(jìn)程,包括把數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間。信號(hào)驅(qū)動(dòng) IO 是內(nèi)核通知我們何時(shí)可以啟動(dòng)一個(gè) IO 操作,而異步 IO 模型是由內(nèi)核通知我們 IO 操作何時(shí)完成。

注:前 4 種模型都是帶有阻塞部分的,有的阻塞在等待數(shù)據(jù)準(zhǔn)備好,有的阻塞在從內(nèi)核空間拷貝數(shù)據(jù)到用戶空間。而這種模型應(yīng)用進(jìn)程從調(diào)用 aio_read 到數(shù)據(jù)被拷貝到用戶空間,不用任何阻塞,所以該種模式叫異步 IO 模型。這五種模型的取名和并列方式我是保留意見的,感覺容易迷惑讀者。

??優(yōu)點(diǎn):沒有任何阻塞,充分利用系統(tǒng)內(nèi)核將 IO 操作與計(jì)算邏輯并行。

??缺點(diǎn):編程復(fù)雜、操作系統(tǒng)支持不好。目前只有 windows 下的 iocp 實(shí)現(xiàn)了真正的 AIO。linux 下在 2.6 版本中才引入,目前并不完善,所以 Linux 下一般采用多路復(fù)用模型。

各 IO 模型對(duì)比

??前四種模型的主要區(qū)別于第一階段,因?yàn)樗麄兊牡诙A段都是一樣的:在數(shù)據(jù)從內(nèi)核拷貝到應(yīng)用進(jìn)程的緩沖區(qū)期間,進(jìn)程阻塞于 recvfrom 調(diào)用。相反,異步 IO 模型在這兩個(gè)階段都需要處理,從而不同于其他四種模型。

           服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么     ??

感謝各位的閱讀,以上就是“服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)服務(wù)器網(wǎng)絡(luò)編程的IO模型是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI