首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WSAPoll与重叠的WSARecv性能?

WSAPoll与重叠的WSARecv性能?
EN

Stack Overflow用户
提问于 2022-05-27 18:28:31
回答 1查看 148关注 0票数 2

我正在创建一个必须处理1000+客户端的服务器,我目前使用的方法是:

一个线程将使用WSAAccept来处理传入的连接,它有一个线程池,每个线程将一次使用WSAPoll处理多个客户端。

例如,如果客户端刚刚连接,服务器将找到一个空闲的poller线程,并将其添加到该poller线程的WSAPoll的fdset中,因此poller线程将处理新的客户端连接。

轮询线程将使用非阻塞WSAPoll来处理连接,然后使用(阻塞) recv()来接收数据包。

代码语言:javascript
运行
复制
Server: WSAAccept
    Thread Poller #1: WSAPoll [1, 2, 3, 4, 5]  // max out
        recv[1, 2, 3, 4, 5]
    Thread Poller #2: WSAPoll [6, 7, 8, 9, 10] // max out
        recv[6, 7, 8, 9, 10]
    Thread Poller #3: WSAPoll [11, 12]         // free
        recv[11, 12]
    // create more pollers if all maxed out

它对我很好,但后来我发现了一个(可能是)更好的解决方案,使用重叠套接字和

这里的想法是使用非阻塞的WSARecv完成回调,而不是使用WSAPoll

代码语言:javascript
运行
复制
    CompletionCallback(){ WSARecv(socket, CompletionCallback); }
Loop:
    socket = WSAAccept();
    WSARecv(socket, CompletionCallback); // CompletionCallback will handle the connection.

因此,不需要多线程和/或WSAPoll,我已经制作了一个PoC,它似乎工作得很好,但它是一个线程,我想知道与旧方法相比,它的性能如何。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-29 03:01:12

重叠的I/O尺度非常好--缩小/放大/缩小。我的工具使用带有重叠I/O + Nt线程池的AcceptEx。它可以很好地扩展到成千上万的连接。https://github.com/Microsoft/ctsTraffic

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72409685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档