Overlap IO與IOCP對比

有關Overlap與IOCP的區別一直搞的不是很清楚。最近仔細分別用兩種方式寫了一次代碼,總算搞清楚了。其實歸結到就一句。IO完成後的回調處理是否支持多線程處理。


區別很簡單。在進行WSARecv,WSARecvFrom,WSASend,WSASendTo函數調用之後,如果使用Overlap IO,則需要使用WaitForMultiEvents把所有的Overlap的Event數組作爲參數進行等待判定處理。這裏就使得WaitForMultiEvents不能在多個線程上對同一個Event隊列進行同時處理。限制了其對於多線程的處理。如果要使用多線程機制,則需要Event進行負載均衡分配。而如果使用IOCP, GetQueuedCompletionStatus之需要一個IOCP對象作爲參數。每次返回一個對象進行處理。則支持同時在多個線程上進行同時操作。
所以在多線程並行處理上,IOCP對於Overlap進行了擴展。overlap實現了io操作的非阻塞模式,而IOCP實現了io操作的返回的並行處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章