日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络编程模型综述 之 UNIX网络I/O模型

發(fā)布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程模型综述 之 UNIX网络I/O模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

阻塞I/O

???????? Socket設(shè)置為阻塞模式,當(dāng)socket不能立即完成I/O操作時,進程或線程進入等待狀態(tài),直到操作完成。如下圖:

????????

???????? 這種模型非常經(jīng)典,也被廣泛使用,優(yōu)勢在于非常簡單,等待的過程中占用的系統(tǒng)資源微乎其微,程序調(diào)用返回時,必定可以拿到數(shù)據(jù);

???????? 但簡單也帶來一些缺點,程序在數(shù)據(jù)到來并準(zhǔn)備好以前,不能進行其他操作,需要有一個線程專門用于等待,這種代價對于需要處理大量連接的服務(wù)器而言,是很難接受的;

非阻塞I/O

???????? socket設(shè)置成非阻塞模式,與阻塞模式不同的是:無數(shù)據(jù)時,也不會進入等待,而是立即返回特定錯誤,如下圖:

????????

這種模式在沒有數(shù)據(jù)可以接收時,可以進行其他的一些操作,比如有多個socket時,可以去查看其他socket有沒有可以接收的數(shù)據(jù);

實際應(yīng)用中,這種I/O模型的直接使用并不常見,因為它需要不停的查詢,而這些查詢大部分會是無必要的調(diào)用,白白浪費了系統(tǒng)資源;

非阻塞I/O應(yīng)該算是一個鋪墊,為I/O復(fù)用和信號驅(qū)動奠定了非阻塞使用的基礎(chǔ)。

I/O復(fù)用

???????? I/O復(fù)用模型能讓一個或多個socket可讀或可寫準(zhǔn)備好時,應(yīng)用能被通知到;I/O復(fù)用模型早期用select實現(xiàn),它的工作流程如下圖:

????

???????? 這種模型的使用場景一般有這樣一個共同特點:都有多個socket需要處理,這樣能在獲取I/O事件時復(fù)用同一個等待機制。比如監(jiān)聽服務(wù)器,既要處理監(jiān)聽的socket,又要處理連接的socket

???????? I/O復(fù)用是應(yīng)用場景較多的一種模式,socket連接數(shù)多時,大多會采用它。除了select以外,I/O復(fù)用的還可以用pollepollkqueuefreebsd)來實現(xiàn),后兩者在處理大量連接時性能上有很大的提高。

信號驅(qū)動

???????? 信號驅(qū)動模型是在socket準(zhǔn)備好的時候用信號的方式進行通知,然后應(yīng)用程序從內(nèi)核讀取數(shù)據(jù)。

???????? 然而,對于socketSIGIO觸發(fā)意味著多種可能,對于UDP有兩種,對于TCP,則有7種,要想?yún)^(qū)分是何種操作引起的signal都是一件困難的事情,所以這種模型很少被實用,直到內(nèi)核2.3起,引入了POSIX RT-Signal機制以后,這一現(xiàn)象得到些許改善。

???????

異步I/O

???????? 在標(biāo)準(zhǔn)Unix下,異步I/O是由“aio_XXX”接口提供的,它把一個信號和值與每一個I/O操作關(guān)聯(lián)起來。異步I/OPOSIX 1003.1b實時標(biāo)準(zhǔn)的擴展,也屬于Single Unix Specificationversion 2

???????? 幾年前,Ben LaHaise實現(xiàn)了Linux AIO,合并到了2.5.32的內(nèi)核中,在2.6時它正式成為標(biāo)準(zhǔn)特性。然而,令人遺憾的是,它目前還不支持對socket的操作,相信不久以后會完善起來。

???????? 異步I/O的模型與I/O復(fù)用和信號驅(qū)動頗有些相似,但最大的區(qū)別是:信號到達時,I/O操作已經(jīng)由內(nèi)核完成,應(yīng)用只需要繼續(xù)處理數(shù)據(jù)就好;

???????? POSIXAIO的操作流程如下:

評論這張

總結(jié)

以上是生活随笔為你收集整理的网络编程模型综述 之 UNIX网络I/O模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。