修订一:清理明显

在此版本的示例程序中,进行了一些明显的更改,这些更改将在提高性能方面取得初步进展。 此版本的代码远未进行性能优化,但它是一个很好的增量步骤,可用于检查增量更好的方法的影响。

警告

此应用程序示例提供了故意降低的性能,以说明通过更改代码可以改进的性能。 不要在应用程序中使用此代码示例;它仅用于说明目的。

 

#include <windows.h>

BYTE Set(row, col, bAlive)
{
    SOCKET s = socket(...);
    BYTE byRet = 0;
    BYTE tmp[3];
    tmp[0] = (BYTE)row;
    tmp[1] = (BYTE)col;
    tmp[2] = (BYTE)bAlive;
    bind( s, ... );
    connect( s, ... );
    send( s, &tmp, 3 );
    recv( s, &byRet, 1 );
    closesocket( s );
    return byRet;
}

此版本中的更改

此版本反映以下更改:

  • 删除了 SNDBUF=0。 删除由于未缓冲区发送和延迟确认而导致的 200 毫秒延迟。
  • 删除了 Send-Send-Receive 行为。 此更改消除了由于 Nagle 和延迟 ACK 交互而导致的 200 毫秒延迟。
  • 删除了 little-endian 假设。 字节现在按顺序排列。

剩余问题

在此版本中,仍然存在以下问题:

  • 应用程序仍然连接较重。 由于删除了 600 毫秒以上的延迟,应用程序现在达到每秒 12 个连接持续速率。 许多并发连接现在成为一个问题。
  • 应用程序仍然很胖;未更改的单元格仍会传播到服务器。
  • 应用程序仍表现出较差的流式处理;3 字节发送仍然是小型发送。
  • 应用程序现在发送 2 个字节/RTT,这相当于直接连接的以太网上的 4 KB/秒。 这不是太快,但 TIME-WAIT 可能会首先导致问题。
  • 开销已降低到 99.3%,这仍然不是一个很好的开销百分比。

关键性能指标

以下关键性能指标以往返时间 (RTT) 、良好输出和协议开销表示。 有关这些术语的说明,请参阅 网络术语 主题。

此版本反映以下性能指标:

  • 单元格时间 - 2×RTT
  • Goodput - 2 字节/RTT
  • 协议开销 - 99.3%

改进慢速应用程序

网络术语

基线版本:性能非常差的应用程序

修订版 2:为更少的连接重新设计

修订版 3:压缩块发送

未来改进