Compartilhar via


Revisão Dois: Reprojetando para menos conexões

Nesta revisão, o aplicativo de exemplo é reprojetado para eliminar conexões desnecessárias.

Aviso

Esses exemplos do aplicativo também fornecem desempenho intencionalmente ruim, a fim de ilustrar melhorias de desempenho possíveis com alterações no código. Não use este exemplo de código em seu aplicativo; é apenas para fins de ilustração.

 

ComputeNext( Map );
bind( s, ... );
connect( s, ... );
for(int i=0 ; i < ROWS ; ++i)
  for(int j=0 ; j < COLS ; ++j)
  {
    BYTE tmp[3];
    tmp[0] = i;
    tmp[1] = j;
    tmp[2] = Map[i][j];
    send( s, tmp, 3 );
    recv( s, &byRet, 1 );
  }
closesocket( s );

Problemas restantes

As alterações em Revisão Dois reformularam o aplicativo para fazer apenas uma conexão por atualização. O aplicativo ainda inclui os seguintes problemas de desempenho:

  • O aplicativo ainda é serializado e tagarela.
  • O aplicativo ainda tem um design gordo; há muitos envios que não exigem nenhuma operação neste design.
  • Os envios ainda são apenas 3 bytes, o que é um streaming ruim.

Principais métricas de desempenho

As métricas de desempenho a seguir são expressas em RTT (Tempo de Viagem de Ida e Volta), Boa taxa 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:

  • Tempo de célula — 1*RTT
  • Goodput — 4 bytes/RTT
  • Sobrecarga de protocolo – 96,8%

Melhorando 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 3: Envio de Bloco Compactado

Melhorias futuras