有关Overlap与IOCP的区别一直搞的不是很清楚。最近仔细分别用两种方式写了一次代码,总算搞清楚了。其实归结到就一句。IO完成后的回调处理是否支持多线程处理。
区别很简单。在进行WSARecv,WSARecvFrom,WSASend,WSASendTo函数调用之后,如果使用Overlap IO,则需要使用WaitForMultiEvents把所有的Overlap的Event数组作为参数进行等待判定处理。这里就使得WaitForMultiEvents不能在多个线程上对同一个Event队列进行同时处理。限制了其对于多线程的处理。如果要使用多线程机制,则需要Event进行负载均衡分配。而如果使用IOCP, GetQueuedCompletionStatus之需要一个IOCP对象作为参数。每次返回一个对象进行处理。则支持同时在多个线程上进行同时操作。
所以在多线程并行处理上,IOCP对于Overlap进行了扩展。overlap实现了io操作的非阻塞模式,而IOCP实现了io操作的返回的并行处理。
区别很简单。在进行WSARecv,WSARecvFrom,WSASend,WSASendTo函数调用之后,如果使用Overlap IO,则需要使用WaitForMultiEvents把所有的Overlap的Event数组作为参数进行等待判定处理。这里就使得WaitForMultiEvents不能在多个线程上对同一个Event队列进行同时处理。限制了其对于多线程的处理。如果要使用多线程机制,则需要Event进行负载均衡分配。而如果使用IOCP, GetQueuedCompletionStatus之需要一个IOCP对象作为参数。每次返回一个对象进行处理。则支持同时在多个线程上进行同时操作。
所以在多线程并行处理上,IOCP对于Overlap进行了扩展。overlap实现了io操作的非阻塞模式,而IOCP实现了io操作的返回的并行处理。

本文详细解释了IOCP(Io Completion Port)与Overlap的区别,重点在于IOCP如何实现对多线程的并行处理能力,克服Overlap在多线程环境下受限的问题。
1187

被折叠的 条评论
为什么被折叠?



