我覺得WSAAsyncSelect模型實際上 是有一個工具在時刻監視 套接字的緩沖區, 當緩沖區發生變化時,就發訊息通知應用程式,就好像汽車油箱的浮標一樣,當油箱沒油了,就通知汽車。
可是如果是監視緩沖區,它是怎么區分是FD_ACCEPT事件還是FD_READ事件呢。
另一個問題:我覺得 select()模型是一個異步阻塞的模型,而不是非阻塞模型。按照下面標準的話。
老張要用水壺燒開水,則他有以下4種做法:
① 老張把水壺放到火上,然后站在旁邊等待,期間他不做任何事,一直等到水開(同步阻塞);
② 老張把水壺放到火上,然后去客廳看電視,再時不時去廚房看看水開了沒有(同步非阻塞);
③ 老張把一個會鳴笛的水壺放到火上,然后站在旁邊等待,一直等到鳴笛水開(異步阻塞);
④ 老張把會鳴笛的水壺放到火上,然后去看電視,在水壺不鳴笛之前不再去看它,等聽到鳴笛后再去拿壺(異步非阻塞)。
可見,同步和異步是針對水壺而言的,普通水壺:同步;響水壺:異步。而阻塞和非阻塞是針對老張而言的,站在旁邊等的老張:阻塞;看電視的老張:非阻塞。
uj5u.com熱心網友回復:
WSAAsyncSelect底層我認為是那種訂閱發布觀察者。訂閱了事件,當事件發生時就通知訂閱者。而select io就是主動查看,每次都要主動看發生了事件沒有。
select 其他操作recv send依然是阻塞同步的。
uj5u.com熱心網友回復:
先要把你所需要觀察的事件與套接字進行關聯登記注冊轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/51518.html
標籤:網絡編程
