*****= 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 核心將資料準備...