![]() |
1
2
使用IOCP,所有的send和recv调用都由一个线程池处理(一个小的线程池通常很好),所以画一个包含send/recv的框,上面有3个红点,下面有10000个蓝点。 使用IOCP,您会发出一系列重叠的请求。一旦这些请求完成,它们就被放入一个队列(IOCP)中,并且为该队列提供服务的线程可以删除它们并处理它们。因此,如果有10000个连接都有一个挂起的读取,那么当数据从每个客户机到达时,您将得到进入IOCP的读取完成。您的线程将被唤醒并处理完成,它们可能会发出更多的重叠读操作,也可能发出重叠写操作。大多数情况下,您不关心重叠写入何时完成(除非您确实关心;),因此完成处理只包括释放每个操作的数据(即,您刚刚发送到客户端的数据)和减少连接上的使用计数。。。 我的文章链接到 free IOCP server framework 佩奇再解释一下。 |
![]() |
2
2
有一个 Dr Dobbs article 关于这个。 |