修訂第一:清除明顯
在這個版本的範例程式中,已進行一些明顯的變更,這會在改善效能方面採取初始步調。 此版本的程式碼遠不是效能微調,但這是一個良好的累加步驟,可檢查累加較佳方法的效果。
警告
此應用程式範例提供刻意不佳的效能,以說明程式碼變更可能改善的效能。 請勿在應用程式中使用此程式碼範例;僅供說明之用。
#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 毫秒的延遲。
- 移除了小到尾假設。 位元組現在依序排列。
剩餘的問題
在此版本中,下列問題仍然存在:
- 應用程式仍會大量連線。 由於移除了 600+ 毫秒的延遲,應用程式現在會達到每秒 12 個持續連線率。 許多並行連線現在會變成問題。
- 應用程式仍然很豐富;未變更的儲存格仍會傳播至伺服器。
- 應用程式仍會顯示不佳的串流;3 位元組傳送仍然很小。
- 應用程式現在會傳送 2 個位元組/RTT,在直接連線的乙太網路上等於 4 KB/秒。 這不是太快,但 TIME-WAIT 可能會先造成問題。
- 額外負荷降低至 99.3%,這仍然不是良好的額外負荷百分比。
關鍵效能計量
下列主要效能計量會以來回時程表示 (RTT) 、Goodput 和通訊協定額外負荷。 如需這些詞彙的說明,請參閱 網路術語 主題。
此版本反映下列效能計量:
- 儲存格時間- 2×RTT
- Goodput — 2 個位元組/RTT
- 通訊協定額外負荷- 99.3%
相關主題