【发布时间】:2021-10-07 08:03:31
【问题描述】:
我有一个运行 UDP 服务器的应用程序,它向它的客户端(几百个)发送相当多的数据。它不会发送不间断的数据,而是每隔几毫秒(例如 50 毫秒)发送一次。重点是:发送数据时,一定要快。不幸的是,调用sendto 或sendmsg 会变得非常缓慢。
一个可能的解决方案是在多个线程上为同一个服务器套接字调用这些函数,但不同的客户端。
不幸的是,性能提升远没有预期的那么大(例如,对于 n 个线程,所需的时间到目前为止还没有除以 n)。如果从多个线程为同一个服务器套接字调用 sendto / sendmsg 可能会有一些问题吗?这可以避免吗?
(缓冲区和内核参数已经调整,所以这应该不是问题)
非常感谢
【问题讨论】:
-
它变慢了,因为你填满了套接字发送缓冲区。添加线程不可能解决这个问题。增加缓冲区、减小数据报大小、降低发送速率或降低您的期望。
-
任何有关性能的问题都需要衡量。
标签: linux networking udp low-latency