Compartilhar via


Revisão Três: Envio de Bloco Compactado

Nesta versão do aplicativo, um envio de bloco compactado dos dados é usado. Essa alteração resulta em uma melhoria significativa no desempenho.

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 );

Alterações nesta versão

Esta versão reflete as seguintes alterações:

  • As atualizações de célula não são mais serializadas.
  • Como um envio em bloco é usado, o aplicativo não é mais tagarela.
  • A compactação de dados é usada, resultando em um aplicativo menos gordo.

Ainda há um problema com essa versão do aplicativo; o risco de deadlock existe, pois um envio grande é usado sem recebimentos. O servidor envia um byte para cada 3 bytes recebidos. Isso poderá causar um deadlock se o tamanho do buffer de recebimento for menor que 1000 bytes para este aplicativo de exemplo.

Principais métricas de desempenho

As métricas de desempenho a seguir são expressas em RTT (Tempo de Viagem de Ida e Volta), Goodput e Sobrecarga de Protocolo. Consulte o tópico Terminologia de Rede para obter uma explicação desses termos.

Esta versão reflete as seguintes métricas de desempenho:

  • Hora da Célula — .002*RTT
  • Goodput — 2 Kilobytes/RTT
  • Sobrecarga de protocolo – 14%

Da sobrecarga de 14%, 6% é dos cabeçalhos Ethernet e os outros 8% são da inicialização e da desinstalação da conexão.

Aprimorando um aplicativo lento

Terminologia de rede

A versão de linha de base: um aplicativo de desempenho muito ruim

Revisão 1: Limpando o Óbvio

Revisão 2: Reprojetando para menos conexões

Melhorias futuras