リビジョン 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% は接続のスタートアップとティアダウンからのオーバーヘッドです。
関連トピック