1. 程式人生 > >windows下併發I/O伺服器模型對比(一):5種併發I/O伺服器模型

windows下併發I/O伺服器模型對比(一):5種併發I/O伺服器模型

windows下併發I/O伺服器模型對比

windows下有5種併發I/O伺服器模型,羅列他們,並簡述其優缺點。每一種更高階的模型,都是基於解決它的前一種模型的不足而誕生的。只有瞭解了他們之間的差別,才能理解他們的優缺點,才能更好地做出適合於產品與專案的選擇。

由於本人學習時間也不長,下述有不當之處,還請路過的朋友不吝賜教。交流QQ 1010316426

(第1種)I/O複用

【關鍵詞】: select
【優】:跨平臺通用。由於是TCP/IP的標準功能,所以每一個OS平臺都需要支援。因此如果想編寫跨平臺程式碼的話,只能選擇select。
【缺】:1、要使用select,需要反覆地設定FD_SET,還需要迴圈遍歷地讀取FD_SET,因此程式碼會顯得較為繁瑣。
2、select會從作業系統的使用者層陷入核心層,這種陷入是比較消耗效能的。

(第2種)非同步通知I/O

【關鍵詞】:WSAEventSelect
【優】:可視作只需陷入核心層一次的select。
【缺】:由於需要作業系統繫結SOCKET和Event,因此需要開發人員編寫程式碼維護SOCKET和Event的關聯關係。
【備註】:1、本模型主要側重於通知I/O事件的狀態,而非I/O。
2、SOCKET被自動設定為非阻塞模式。
3、WSAEventSelect解決了select頻繁陷入核心層而引起的效能問題。但並沒有解決頻繁讀取I/O事件的問題。因為獲取Event狀態需要用到WSAWaitForMultipleEvents()。

(第3種)非同步通知I/O

【關鍵詞】:WSAAsyncSelect
【優】:
【缺】:
【備註】:1、WSAAsyncSelect一般用於介面開發。WSAAsyncSelect是讓系統在有事件發生時發一個訊息,WSAEventSelect是讓系統在有事件發生時啟用一個event核心物件。

(第4種)重疊I/O

【關鍵詞】:WSASocket,WSASend,WSARecv,WSAOVERLAPPED
【優】:1、不需要開發人員維護Event和SOCKET的關聯關係。
2、有兩種通知I/O事件的方法:基於Event和基於回撥(詳見WSASend,WSARecv)。
【缺】:使用基於Event的通知,則需要呼叫WSAWaitForMultipleEvents(),使用基於回撥的通知,則需要使執行緒處於alertable wait狀態。這兩處會影響I/O的效能。
【備註】:1、側重於I/O處理。2、SOCKET必須設定為非阻塞模式。

(第5種)IOCP

【關鍵詞】:CreateIoCompletionPort
【優】:1、使用多執行緒方式解決重疊I/O的兩點不足之處。2、執行緒數關聯於CPU數,效能優良。
【缺】:不好理解。
【備註】: