C++ WSASend速度与优化
我正在实现一个简化的静态web服务器,其灵感来自以下示例: 问题是,在局域网或同一台机器上,WSASend不能超过2 Mbit/s。WSARecv没有这个限制。未修改套接字,已启用Nagle。 以下是我对Chrome和Windows 8.1 64位上的一个活动连接所做的测试:C++ WSASend速度与优化,c++,sockets,tcp,winsock,iocp,C++,Sockets,Tcp,Winsock,Iocp,我正在实现一个简化的静态web服务器,其灵感来自以下示例: 问题是,在局域网或同一台机器上,WSASend不能超过2 Mbit/s。WSARecv没有这个限制。未修改套接字,已启用Nagle。 以下是我对Chrome和Windows 8.1 64位上的一个活动连接所做的测试: 使用专用线程更改为阻塞模式(无更多IOCP)->无更改 创建专用线程池->无更改 各种缓冲区大小->无变化 调试或发布->无更改 限制同一插座上同时发布的帖子数量:0(仅在前一个帖子完成后才发布新帖子),1、10、10
- 使用专用线程更改为阻塞模式(无更多IOCP)->无更改
- 创建专用线程池->无更改
- 各种缓冲区大小->无变化
- 调试或发布->无更改
- 限制同一插座上同时发布的帖子数量:0(仅在前一个帖子完成后才发布新帖子),1、10、100、1000:数量越大,启动速度越高。达到极限后,返回低速。如果没有限制:RAM的使用率逐渐提高到99%
找到了。有一个线程在每次准备从输出FIFO发送新数据包时被事件唤醒。错误在于,一些事件同时发出信号,因此它们被(视为)合并,而WSASend没有按需要频繁调用
建议在使用16KB数据包发送通知之前同时调用WSASend的建议次数将非常有用。“WSASend不能超过2 Mbit/s”-您是如何得出这个结论的?我下载了一个Iso或另一个加载到内存中的大文件,浏览器会在客户端显示速度,任务管理器在服务器端显示网络使用情况。双方的速度相同。但是,短脉冲(少于2秒或3秒)处理正确。上载速率高出100倍。在每次调用中,您将向WSASend传递多少字节?数据包大小为16 KB,但结果相同,为8 KB。