【问题标题】:"sendto" from multiple threads for a single socket从多个线程“sendto”用于单个套接字
【发布时间】:2021-10-07 08:03:31
【问题描述】:

我有一个运行 UDP 服务器的应用程序,它向它的客户端(几百个)发送相当多的数据。它不会发送不间断的数据,而是每隔几毫秒(例如 50 毫秒)发送一次。重点是:发送数据时,一定要快。不幸的是,调用sendtosendmsg 会变得非常缓慢。

一个可能的解决方案是在多个线程上为同一个服务器套接字调用这些函数,但不同的客户端。

不幸的是,性能提升远没有预期的那么大(例如,对于 n 个线程,所需的时间到目前为止还没有除以 n)。如果从多个线程为同一个服务器套接字调用 sendto / sendmsg 可能会有一些问题吗?这可以避免吗?

(缓冲区和内核参数已经调整,所以这应该不是问题)

非常感谢

【问题讨论】:

  • 它变慢了,因为你填满了套接字发送缓冲区。添加线程不可能解决这个问题。增加缓冲区、减小数据报大小、降低发送速率或降低您的期望。
  • 任何有关性能的问题都需要衡量。

标签: linux networking udp low-latency


【解决方案1】:

您可以尝试使用原始套接字发送数据报,您必须手动创建 UDP 标头,但您将绕过 UDP 堆栈处理,这可能会解决您遇到的延迟。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2016-12-19
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多