通过多个 UDP 端口传递数据是不是会提高性能

Posted

技术标签:

【中文标题】通过多个 UDP 端口传递数据是不是会提高性能【英文标题】:Does passing data through multiple UDP ports increase performance通过多个 UDP 端口传递数据是否会提高性能 【发布时间】:2019-05-03 13:40:13 【问题描述】:

我目前正在实施受 KCP、Dragonite 和 QUIC 启发的可靠 UDP 传输,只是出于自学目的。我想应用几个优化,其中之一是多路复用。

我的想法是:我将数据分成小块(块大小与 MTU 相关),并利用协程通过多个数据报套接字异步(在客户端和服务器上)异步发送和接收它们。

这个解决方案会起作用吗?我应该期待性能改进吗?

【问题讨论】:

您的主机仍将串行发送和接收它们。网络本质上是串行的,而不是并行的,除非您有多个 NIC 等。 【参考方案1】:

与 TCP 相反,UDP 没有慢启动,即它可以从一开始就以全速(如果知道)开始发送。因此,本质上,发送速度的限制是本地系统发送数据的速度或可用带宽。假设发送不受 CPU 限制,并且您设想的所有多个套接字的流量将采用相同的方式(传出网卡、路由器、传入网卡),并且没有在中间盒中完成特定于连接的流量整形,然后使用多个套接字不应导致速度提高,因为它不会改变各种瓶颈的使用方式。

如果发送受 CPU 限制,这会发生变化。在这种情况下,使用多个协同程序与多个套接字相结合可能会更好地利用当今的多处理器系统,因为它同时在多个 CPU 内核上运行,并且这种方式可以发送更多数据包,直到它再次受到 CPU 限制。

如果流量受带宽限制,但存在可提供额外带宽的目标系统的替代路径,这也会发生变化。通过将套接字绑定到不同的本地 IP 地址(在不同的本地网卡上)或通过选择不同的目标 IP 地址(对于相同的目标系统),可以使用这种替代路径,从而利用额外的带宽.

如果有一些流量整形限制了客户端和服务器之间的每个连接的带宽,同样地,多个套接字可能会有所帮助。在这种情况下,多个套接字可以增加可用带宽。

【讨论】:

以上是关于通过多个 UDP 端口传递数据是不是会提高性能的主要内容,如果未能解决你的问题,请参考以下文章

如何提高oracle模糊查询的性能?

提高 Javascript 中多个 FETCH 请求的性能

如何提高数据库查询的性能?

非规范化会提高 SQL 的性能吗? [关闭]

视图的索引字段是不是会提高 MySQL 的性能?

对连接的结果进行排序时,索引是不是会提高性能