リビジョン 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 バイトを送信します。 このサンプル アプリケーションの受信バッファー サイズが 1000 バイト未満の場合、デッドロックが発生する可能性があります。

主要なパフォーマンス メトリック

次のパフォーマンス メトリックは、ラウンド トリップ時間 (RTT)、Goodput、プロトコルオーバーヘッドで表されます。 これらの用語の説明については、 ネットワーク用語 に関するトピックを参照してください。

このバージョンには、次のパフォーマンス メトリックが反映されています。

  • セル時間 — .002*RTT
  • Goodput — 2 キロバイト/RTT
  • プロトコルのオーバーヘッド — 14%

14% のオーバーヘッドのうち、6% はイーサネット ヘッダーからのものであり、他の 8% は接続のスタートアップとティアダウンからのオーバーヘッドです。

低速アプリケーションの改善

ネットワーク用語

ベースライン バージョン: パフォーマンスが非常に低いアプリケーション

リビジョン 1: 明らかなのクリーンアップ

リビジョン 2: より少ない接続の再設計

今後の機能強化