http://img600.imageshack.us/img600/3567/graphicrepresentation.png
我的推理方式正确吗?如果是这样,谁能告诉我,就像上面的方案一样,I/O 完成端口将如何工作?在我开始学习如何为 MMORPG 制作高性能服务器之前,我想确定这一切是如何工作的。
http://img600.imageshack.us/img600/3567/graphicrepresentation.png
我的推理方式正确吗?如果是这样,谁能告诉我,就像上面的方案一样,I/O 完成端口将如何工作?在我开始学习如何为 MMORPG 制作高性能服务器之前,我想确定这一切是如何工作的。
Dobbs 博士有一篇关于此的文章。
使用 IOCP,您所有的 send 和 recv 调用都由一个线程池处理(一个小池通常很好),所以画一个带有 send/recv 的盒子,上面有 3 个红点,下面有 10,000 个蓝色点。
使用 IOCP,您可以发出一系列重叠的请求。一旦这些请求完成,它们就会被放入一个队列(IOCP)中,服务于该队列的线程可以删除它们并处理它们。因此,如果您有 10,000 个连接,所有连接都有一个待处理的读取,那么当数据从每个客户端到达时,您将获得进入 IOCP 的读取完成。您的线程将被唤醒并处理完成,它们可能会发出更多重叠读取,并且可能还会发出重叠写入。大多数情况下,您并不关心重叠写入何时完成(除非您关心;)),因此完成处理仅包括释放每个操作数据(即您刚刚发送给客户端的数据)并减少使用量指望连接...
从我的免费 IOCP 服务器框架页面链接到的文章对此进行了更多解释。