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

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

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

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

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),蘭考企業(yè)網(wǎng)站建設(shè),蘭考品牌網(wǎng)站建設(shè),網(wǎng)站定制,蘭考網(wǎng)站建設(shè)報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,蘭考網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

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

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

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

1、阻塞 IO 模型(blocking IO)

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

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

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

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

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

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

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

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

3、IO 復用模型(IO multiplexing)

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

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

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

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

4、信號驅(qū)動 IO 模型(signal-driven IO)

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

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

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

??缺點:在前一個通知信號沒被處理的情況下,后一個信號來了也不能被處理。所以在信號量大的時候會導致后面的信號不能被及時感知。

5、異步 IO 模型(asynchronous IO)

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

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

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

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

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

各 IO 模型對比

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

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

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


網(wǎng)站欄目:服務器網(wǎng)絡編程的IO模型是什么
標題路徑:http://weahome.cn/article/gppjgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部