以下是轉載別人的文章 轉載出處 http://blog.csdn.net/piggyxp/archive/2004/09/23/114883.aspx
目錄:
1.
重疊模型的優點
2.
重疊模型的基本原理
3.
關於重疊模型的基礎知識
4.
重疊模型的實現步驟
5.
多用戶端情況的注意事項
一.
重疊模型的優點1. 可以運行在支援Winsock2的所有Windows平台 ,而不像完成連接埠只是支援NT系統。2. 比起阻塞、select、WSAAsyncSelect以及WSAEventSelect等模型,重疊I/O(Overlapped I/O)模型使應用程式能達到更佳的系統效能。 因為它和這4種模型不同的是,使用重疊模型的代理程式更新緩衝區收發系統直接使用資料,也就是說,如果應用程式投遞了一個10KB大小的緩衝區來接收資料,且資料已經到達通訊端,則該資料將直接被拷貝到投遞的緩衝區。而這4種模型種,資料到達並拷貝到單通訊端接收緩衝區中,此時應用程式會被告知可以讀入的容量。當應用程式調用接收函數之後,資料才從單通訊端緩衝區拷貝到應用程式的緩衝區,差別就體現出來了。3. 從《windows網路編程》中提供的實驗結果中可以看到,在使用了P4 1.7G Xero處理器(CPU很強啊)以及768MB的回應伺服器中,最大可以處理4萬多個SOCKET串連,在處理1萬2千個串連的時候CPU佔用率才40% 左右――非常好的效能,已經直逼完成連接埠了^_^
二.
重疊模型的基本原理
說了這麼多的好處,你一定也躍躍欲試了吧,不過我們還是要先提一下重疊模型的基本原理。 概括一點說,重疊模型是讓應用程式使用重疊資料結構(WSAOVERLAPPED),一次投遞一個或多個Winsock I/O請求。針對這些提交的請求,在它們完成之後,應用程式會收到通知,於是就可以通過自己另外的代碼來處理這些資料了。
需要注意的是,有兩個方法可以用來管理重疊IO請求的完成情況(就是說接到重疊操作完成的通知):1. 事件對象通知(event object notification) 2. 完成常式(completion routines) ,注意,這裡並不是完成連接埠而本文只是講述如何來使用事件通知的的方法實現重疊IO模型,完成常式的方法準備放到下一篇講:) (內容太多了,一篇寫不完啊) ,如沒有特殊說明,本文的重疊模型預設就是指的基於事件通知的重疊模型。既然是基於事件通知,就要求將Windows事件對象與WSAOVERLAPPED結構關聯在一起(WSAOVERLAPPED結構中專門有對應的參數),通俗一點講,就是。。。。對了,忘了說了,既然要使用重疊結構,我們常用的send, sendto, recv, recvfrom也都要被WSASend, WSASendto, WSARecv, WSARecvFrom替換掉了,它們的用法我後面會講到,這裡只需要注意一點,它們的參數中都有一個Overlapped參數,我們可以假設是把我們的WSARecv這樣的操作操作“綁定”到這個重疊結構上,提交一個請求,其他的事情就交給重疊結構去操心,而其中重疊結構又要與Windows的事件對象“綁定”在一起,這樣我們調用完WSARecv以後就可以“坐享其成”,等到重疊操作完成以後,自然會有與之對應的事件來通知我們操作完成,然後我們就可以來根據重疊操作的結果取得我們想要德資料了。
也許說了半天你還是不大明白,那就繼續往後面看吧。。。。。。。-_-b,語言表達能力有限啊~~~