1. 程式人生 > >Winsock五種I/O模型的效能分析

Winsock五種I/O模型的效能分析

非阻塞模式表現出的效能要比阻塞模式稍好,但是佔用了太多的CPU處理時間。測試伺服器將所有客戶對應的socket分類放到FD_SET集合中,然後呼叫select函式篩選出對應集合中有事件發生的socket,並對集合更新。接下來呼叫FD_ISSET巨集重新判斷一個套接字是否在原來加入的FD_SET集合中。隨著客戶連線數量的增多,這種模型的侷限性逐漸凸現。僅僅為了判斷一個套接字是否有網路事件發生,就需要對集合FD_SET執行一次遍歷!使用迭代搜尋來對select更新的FD_SET進行掃描,效能可以得到一些提升。瓶頸在於,伺服器必須能夠很快地掃描出FD_SET集合中的有網路事件發生的套接字的相關資訊。針對這個問題,可以使用更復雜的掃描演算法,如雜湊搜尋,它的效率是極高的。還需要注意的一個問題就是,非分頁池(即直接在實體記憶體中分配的記憶體)的使用極高。這是因為AFD
Ancillary Function Driver,afd.sys提供的支援Windows Sockets應用程式的底層驅動程式,其中執行在核心模式下afd.sys驅動程式主要管理Winsock TCP/IP通訊)和TCP都將使用I/O快取,因為伺服器讀取資料的速度是有限的,相對於CPU的處理速度而言,I/O基本是零位元組的吞吐量。