網摘錄以下比喻,實在生動貼切.....數據結構
////////////////////////////////////////////////////////////////////////////////////////app
select模型
WSAAsyncSelect模型
WSAEventSelect模型
Overlapped I/O 事件通知模型
Overlapped I/O 完成例程模型
IOCP模型socket
//////////////////////////////////////////////////////////////////////////////////////////spa
老陳有一個在外地工做的女兒,不能常常回來,老陳和她經過信件聯繫。他們的信會被郵遞員投遞到他們的信箱裏,這和Socket模型很是相似。orm
//////////////////////////////////////////////////////////////////////////////////////////事件
select模型
老陳很是想看到女兒的信。以致於他每隔10分鐘就下樓檢查信箱,看是否有女兒的信~~~~~
在這種狀況下,「下樓檢查信箱」而後回到樓上耽誤了老陳太多的時間,以致於老陳沒法作其餘工做。
select模型和老陳的這種狀況很是類似:周而復始地去檢查......若是有數據......接收/發送.......開發
//////////////////////////////////////////////////////////////////////////////////////////it
WSAAsyncSelect模型
後來,老陳使用了微軟公司的新式信箱。這種信箱很是先進,一旦信箱裏有新的信件,蓋茨就會給老陳打電話:喂,大爺,你有新的信件了!今後,老陳不再必頻繁上下樓檢查信箱了,牙也不疼了,你瞅準了,藍天......不是,微軟~~~~~~~~
微軟提供的WSAAsyncSelect模型就是這個意思。select
//////////////////////////////////////////////////////////////////////////////////////////請求
WSAEventSelect模型
後來,微軟的信箱很是暢銷,購買微軟信箱的人以百萬計數......以致於蓋茨天天24小時給客戶打電話,累得腰痠背痛,喝蟻力神都很差使~~~~~~
微軟改進了他們的信箱:在客戶的家中添加一個附加裝置,這個裝置會監視客戶的信箱,每當新的信件來臨,此裝置會發出「新信件到達」聲,提醒老陳去收信。蓋茨終於能夠睡覺了。
//////////////////////////////////////////////////////////////////////////////////////////
Overlapped I/O 事件通知模型
後來,微軟經過調查發現,老陳不喜歡上下樓收發信件,由於上下樓其實很浪費時間。因而微軟再次改進他們的信箱。新式的信箱採用了更爲先進的技術,只要用戶告訴微軟本身的家在幾樓幾號,新式信箱會把信件直接傳送到用戶的家中,而後告訴用戶,你的信件已經放到你的家中了!老陳很高興,由於他沒必要再親自收發信件了!
Overlapped I/O 事件通知模型和WSAEventSelect模型在實現上很是類似,主要區別在「Overlapped」,Overlapped模型是讓應用程序使用重疊數據結構(WSAOVERLAPPED),一次投遞一個或多個Winsock I/O請求。這些提交的請求完成後,應用程序會收到通知。什麼意思呢?就是說,若是你想從socket上接收數據,只須要告訴系統,由系統爲你接收數據,而你須要作的只是爲系統提供一個緩衝區~~~~~
//////////////////////////////////////////////////////////////////////////////////////////
I/O 完成例程模型 老陳接收到新的信件後,通常的程序是:打開信封----掏出信紙----閱讀信件----回覆信件......爲了進一步減輕用戶負擔,微軟又開發了一種新的技術:用戶只要告訴微軟對信件的操做步驟,微軟信箱將按照這些步驟去處理信件,再也不須要用戶親自拆信/閱讀/回覆了!老陳終於過上了小資生活!