修订一:清理明显
在此版本的示例程序中,进行了一些明显的更改,这些更改将在提高性能方面取得初步进展。 此版本的代码远未进行性能优化,但它是一个很好的增量步骤,可用于检查增量更好的方法的影响。
警告
此应用程序示例提供了故意降低的性能,以说明通过更改代码可以改进的性能。 不要在应用程序中使用此代码示例;它仅用于说明目的。
#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%
相关主题