Compartir a través de


Revisión tres: envío de bloque comprimido

En esta versión de la aplicación, se usa un envío de bloque comprimido de los datos. Este cambio da como resultado una mejora significativa del rendimiento.

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

Cambios en esta versión

Esta versión refleja los siguientes cambios:

  • Las actualizaciones de celdas ya no se serializan.
  • Dado que se usa un envío de bloque, la aplicación ya no es chatty.
  • Se usa la compresión de datos, lo que da lugar a una aplicación menos grasa.

Todavía hay un problema con esta versión de la aplicación; el riesgo de interbloqueo existe porque se usa un envío grande sin recibir. El servidor envía un byte por cada 3 bytes recibidos. Esto podría provocar un interbloqueo si el tamaño del búfer de recepción es inferior a 1000 bytes para esta aplicación de ejemplo.

Métricas clave de rendimiento

Las siguientes métricas de rendimiento se expresan en Tiempo de ida y vuelta (RTT), Goodput y Sobrecarga del protocolo. Consulte el tema Terminología de red para obtener una explicación de estos términos.

Esta versión refleja las siguientes métricas de rendimiento:

  • Tiempo de celda: .002*RTT
  • Goodput : 2 kilobytes/RTT
  • Sobrecarga del protocolo: 14 %

De la sobrecarga del 14 %, el 6 % procede de los encabezados Ethernet y el otro 8 % procede del inicio y la desmontaje de la conexión.

Mejora de una aplicación lenta

Terminología de red

La versión de línea de base: una aplicación con un rendimiento muy deficiente

Revisión 1: Limpieza de la obvia

Revisión 2: Rediseño para menos conexiones

Mejoras futuras