c++ - Winsock2:重叠 IO 的发送缓冲区大小的影响
问题描述
我一直在修补一个开源项目,该项目已开始使用异步重叠 IO 在其最新版本之一中使用 Winsock2 接口发送数据。在项目过去,提高(旧)阻塞/同步IO 发送性能的一种方法是将发送缓冲区大小(SO_SNDBUF)增加到要发送的数据包的大小(使用 send() 函数)。随着重叠 IO 的引入(使用 WSASend() 函数),这对我来说感觉不太明智。我阅读了文档并认为将 SO_SNDBUF 设置为 0 实际上可能有助于节省一些资源,但我最终只是减慢了发送过程。
现在,尽管进行了一些研究,但我找不到任何关于 WSASend() 和重叠非阻塞 IO 实际处理内部套接字缓冲区的描述。它是否会每隔一段时间使用提供的 WSABUF 结构数组并将尽可能多的数据推送到内部发送缓冲区(即多个 WSABUF,其中一些可能会拆分)?还是一次只尝试将一个 WSABUF 推入缓冲区(如果内部缓冲区太小,则拆分 WSABUF)?
从那里开始:将 SO_SNDBUF 增加到使用异步重叠 IO 时可以预期的最大 WSABUF 的大小有多合理?这显然会增加应用程序的内存利用率,但我认为这暂时不会成为问题,因为我只会打开几十个套接字并增加 SO_SNDBUF 并且我们谈论的是原始大小的三倍。
感谢您的输入!
解决方案
推荐阅读
- docker - 如何在终端中跳过命令的确认问题 - docker system prune -a
- spring - 在 Spring 验证中验证枚举
- html - 从父 div 容器流出的图像是如何隐藏的?
- python - 循环图像分析
- graphql - 如何在graphql中按字符串过滤?
- c# - 无法将行添加到 TableLayoutPanel 插入索引超出范围
- arduino - 在 Arduino IDE 上运行代码时出现库错误
- ios - 从捆绑包中的 xcasset 加载图像和颜色代码
- ffmpeg - ffmpeg movflags 标志前的加号和减号有什么区别?
- math - 如何使 Ada 数学函数使用双精度(长浮点)变量?