在大量客户端连接的情况下,IOCP模型应该是具有先天优势的,首先是每次调用时不需要传入socket列表,其次是他在通知时就已经完成了IO操作,节省了系统调用。
道理是这么个道理,然而在实际应用过程当中,在少量连接的情况下,例如单连接,IOCP的吞吐性能可能远不及SELECT模型。
具体的项目是一个VPN软件,测试环境是 i7 9700 16G内存 56G InfiniBand直连网络。在使用SELECT模型时单线程测速能达到4~7Gbps以上,而IOCP模型仅仅只有1.2Gbps左右。
搜索了一些资料,国外友人在16年前就发现少量连接时IOCP性能非常差
https://alt.winsock.programming.narkive.com/cs0WvuXh/does-iocp-provide-real-performance-gain
另外一个paper显示在大量连接的情况下,IOCP与EPOLL不分伯仲(没有测试select)