リビジョン 3: 圧縮ブロック送信
このバージョンのアプリケーションでは、データの圧縮ブロック送信が使用されます。 この変更により、パフォーマンスが大幅に向上します。
BYTE tmp[3*ROWS*COLS];
FIELD Old = Map;
ComputeNext( Map );
n=Compact(Map,Old,tmp);
bind( s, ... );
connect( s, ... );
send( s, tmp, 3*n );
//can't do recv(s,tmp,n)
for(int i=0; i < n; )
recv( s, tmp+i, n-i );
closesocket( s );
このバージョンの変更点
このバージョンには、次の変更が反映されています。
- セルの更新はシリアル化されなくなりました。
- ブロック送信が使用されるため、アプリケーションはチャットできなくなっています。
- データ圧縮が使用され、その結果、アプリケーションの脂肪が少なくなります。
このバージョンのアプリケーションには引き続き問題があります。大きな送信が受信なしで使用されるため、デッドロックのリスクが存在します。 サーバーは、受信した 3 バイトごとに 1 バイトを送信します。 このサンプル アプリケーションの受信バッファー サイズが 1,000 バイト未満の場合、デッドロックが発生する可能性があります。
主要なパフォーマンス メトリック
次のパフォーマンス メトリックは、ラウンド トリップ時間 (RTT)、Goodput、プロトコルオーバーヘッドで表されます。 これらの用語の説明については、ネットワーク用語 トピックを参照してください。
このバージョンには、次のパフォーマンス メトリックが反映されています。
- セル時間 — .002*RTT
- Goodput — 2 KB/RTT
- プロトコルオーバーヘッド — 14%
14% のオーバーヘッドのうち、6% はイーサネット ヘッダーから、他の 8% は接続の起動と破棄です。
関連トピック
-
低速アプリケーションの の改善
-
ベースライン バージョンの : パフォーマンスが非常に低いアプリケーション
-
リビジョン1:明白な をクリーンアップする
-
リビジョン 2: より少ない接続 の再設計