http://img600.imageshack.us/img600/3567/graphicrepresentation.png
我的推理方式正确吗?如果是这样,请问有人可以像上面的方案中那样向我展示I / O完成端口如何工作?在开始学习制造用于MMORPG的高性能服务器之前,我想确定一下这是如何工作的。
最佳答案
使用IOCP,您所有的send和recv调用都由一个线程池处理(通常可以使用一个小池),因此绘制一个带有send / recv的框,在其上方有3个红点,在其下方有10,000个蓝点。
使用IOCP,您会发出一系列重叠的请求。这些请求完成后,它们将被放入队列(IOCP),并且为该队列服务的线程可以将其删除并进行处理。因此,如果您有10,000个连接,并且每个连接上都有一个待处理的读取,那么当数据从每个客户端到达时,您将获得进入IOCP的读取完成。您的线程将被唤醒并处理完成,它们可能会发出更多重叠的读取,并且可能还会发出重叠的写入。大多数情况下,您不关心重叠何时写入完成(除非您确实关心;)),所以完成处理仅包括释放每个操作数据(即,您刚刚发送给客户端的数据)并减少使用量依靠连接...
从我的free IOCP server framework页链接的文章对此进行了更多说明。
关于c++ - 我对基于套接字的模型的图形表示和解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4167589/