五種WinSock I O模型的特點及比較

2021-03-31 12:15:34 字數 1497 閱讀 9824

*****=    select  模型:  

select模型是winsock中應用最廣泛的模型之一,核心就是select函式,它可用於  

判斷套接字上是否存在資料,或者能否向乙個套接字寫入資料。  

這個函式可以有效地防止應用程式在套接字處於阻塞模式中時,send或recv進入  

阻塞狀態;同時也可以防止產生大量的wsaewouldblock錯誤  

select的優勢是能夠從當個執行緒的多個套接字上進行多重連線及i/o。  

這就避免了伴隨阻塞套接字和多重連線的執行緒劇增  

*****=    wsaasyncselect  模型:  

這個是我個人最喜歡的乙個模型^_^    因為它也是以訊息為基礎的。  

關鍵就是wsaasyncselect函式,將socket訊息傳送到hwnd視窗上,然後在那裡  

處理相應的fd_read,fd_write等等訊息  

優點:  

wsaasyncselect和wsaeventselect模型提供了讀寫資料能力的非同步通知,但他們不  

提供非同步資料傳送,而重疊及完成大unkou提供非同步資料的傳送。  

而且它可以在系統開銷不大的情況下同時處理很多連線,而select模型還需要建立  

fd_set結構。  

缺點:  

必須要使用乙個視窗接收訊息-_-b  

如果處理成千上萬的套接字就力不從心了  

*****=    wsaeventselect  模型  

這個也是以時間為基礎的網路事件通知,但是與wsaasyncselect不同的是,  

它主要是由事件物件控制代碼完成的,而不是通過視窗。  

這個就有點複雜了,一句半句說不清...-_-b  

優點:  

不需要視窗  

缺點:  

每次只能等待64個事件,所以處理多個套接字時有必要組織乙個執行緒池;  

所以伸縮性就不如後面的完成埠了  

*****=    重疊模型  

這個模型可以使程式能達到更加的系統效能。基本設計原理就是讓應用程式  

使用重疊的資料結構,一次投遞乙個或多個i/o請求。針對這些提交的請求,  

在他們完成之後,應用程式可為他們提供服務。  

它又分為兩種實現方法:在事件中使用,還有就是完成例程,每樣都不是很好學-_-b  

*****=    完成埠  

這個是所有裡面最為複雜的i/o模型,樓主最好是在理解了重疊i/o的基礎之  

上再來學習。  

完成埠提供了最好的伸縮性,往往可以使系統達到最好的效能,是處理  

成千上萬的套接字的首選。  

從本質上說,完成埠模型要求建立乙個windows完成埠物件,該物件通  

過指定數量的執行緒,對重疊i/o請求進行管理,以便為已經完成的重疊i/o請求提供服務。  

*  其只學這些純理論的東西沒什麼意思,重要的是一定要多動手,看完乙個模型  

就親自動手去實現一下看看,才能真正學會^_^

winsock i o的select模型的學習

include include include pragma comment lib,ws2 32.lib bool insertsock socket psock,socket sock if nindex fd setsize 1 return false return true int mai...

五種IO模型

再講io模型之前,給大家舉乙個釣魚的例子。張三去釣魚,他釣魚的時候一動不動,一直看著魚竿,看有沒有動,無論是誰叫他,他都不動,只有等魚梢動了 魚上鉤了 他才會動 李四去釣魚,他沒有像張三那樣瓷楞著,只是時不時的輪詢檢查魚竿有沒有動。一直在動。王五也來釣魚,他就比較聰明了,在魚竿上掛個鈴鐺,只要鈴鐺響...

五種IO模型

阻塞io 在核心將資料準備好之前,系統呼叫會一直等待,所有的套接字都是預設阻塞方式 非阻塞io 如果核心還沒有將資料準備好,系統呼叫會直接返回,並返回錯誤碼 非阻塞io往往需要以迴圈的方式反覆讀寫檔案描述符,這個過程稱為輪詢,對cpu的浪費較大,一般只在特定的場景下使用 訊號驅動io 核心將資料準備...