我目前有一个应用程序以非常高的速率接收实时消息,我的应用程序需要立即显示这些消息。我读到了关于nagles算法的内容,我明白它将小消息组合成一个大消息然后传输它(它旨在通过延迟ACK来减少确认数据包的数量)。我的问题是将禁用Nagles算法帮助我的应用程序 ?我收到的所有邮件都会在收到后立即显示。对此问题的任何建议都将不胜感激。
更新 另外我只控制接收器,禁用nagles算法。在接收方有任何影响,或仅在发送方禁用时才会产生影响?
答案 0 :(得分:1)
Nagle只是一种发送方算法,所以如果只能影响接收方,则无法禁用它。
即使您可能影响发件人,在进行单向通信时禁用Nagle也不是很有效。在双向通信中,禁用Nagle可以提高吞吐量,因为删除延迟的好处可以累积,因为每个节点可以稍微发送其响应,让对方更快地做出响应。但是,在一个方向的情况下,禁用Nagle可以减少一次往返的延迟,但这些好处不能累积,因为您不延迟数据包的事实不会减慢新数据包的生成。你永远不会超过一次往返。在互联网上,那是~20-30ms。通过局域网,通常是〜1ms
如果你的系统足够实时,单个往返延迟很重要,那么TCP是一个糟糕的协议,你应该使用UDP代替。 Nagle是仅TCP的算法,因此它不会影响UDP。
只是为了好玩:在我的局域网上ping本地计算机是<1ms。这意味着Nagle只能在1ms以下的时间内延迟我的消息。桌面计算机调度程序的量子可以是20-60ms [1],甚至更长的服务器,所以我希望删除nagle算法对我的局域网没有明显的影响,因为消耗CPU的计算机上其他线程的影响相形见绌< / p>