IOCP使用上的一点看法讨论。
iocp的实现,在msdn和codeproject上面的例子都是创建一个iocp,然后所有socket加入该端口监视,n个工作线程全部等待同一个iocp对象。
这样做的坏处,对单个socket有多次io的情况,可能线程1收到第一次完成,线程2收到第2次完成。这里就存在一个包排序(例如2次都是read)或者需要锁定的情况。这样增加代码的复杂度,同时因为锁定,也会降低多线程下的性能。
而我的做法,是对每个线程建立一个iocp对象,并且该线程维护iocp监视的socket计数。
当有new connection时,选取计数值最小的iocp对象来监视该socket。
那么对于每个连接,上面的操作都简化为了单线程。只有在涉及到需要客户端交互时才需要有锁定操作。
同时,因为每个线程的连接数基本平均,负载上也比较均衡(假设每个客户端负载差不多的情况)。
大家的用法是什么样的,都来说说看
这样做的坏处,对单个socket有多次io的情况,可能线程1收到第一次完成,线程2收到第2次完成。这里就存在一个包排序(例如2次都是read)或者需要锁定的情况。这样增加代码的复杂度,同时因为锁定,也会降低多线程下的性能。
而我的做法,是对每个线程建立一个iocp对象,并且该线程维护iocp监视的socket计数。
当有new connection时,选取计数值最小的iocp对象来监视该socket。
那么对于每个连接,上面的操作都简化为了单线程。只有在涉及到需要客户端交互时才需要有锁定操作。
同时,因为每个线程的连接数基本平均,负载上也比较均衡(假设每个客户端负载差不多的情况)。
大家的用法是什么样的,都来说说看
...全文
相关推荐
完整的IOCP实例
开发者可能使用Git或其他版本控制工具来管理这些文件,以便于协同开发和版本追踪。总结来说,这个"完整的IOCP实例"是一个演示如何使用IOCP、NT6线程池和VS2010来构建高性能服务器的实践案例。
Win IOCP中使用openssl.pdf
关键技术##### 2.1 IOCP使用OpenSSL实现难点在讨论IOCP与OpenSSL结合的具体实现之前,有必要先理解两者结合的技术难点。
net-iocp.rar_.net IOCP_IOCP_IOCP windows_Windows iocp使用_iocp编程
标题中的“net-iocp.rar”暗示了这是一个关于.NET框架下使用IOCP技术的压缩文件,可能是包含源代码、文档或者教程的资源。
IOCP.zip_IOCP_IOCP 通信_IOCP类 c++_IOCp pudn_pudn IOCP
在"PUDN"社区中,可能有一些关于IOCP的讨论和示例代码。PUDN是一个分享编程资源和技术讨论的平台,这里的“pudn_iocp”标签可能指的是在该社区中有关IOCP的资源或问题解答。
阻塞模式下IOCP使用
**IOCP的创建与绑定**首先,我们需要使用`CreateIoCompletionPort`函数创建一个IOCP。



