Condividi tramite


Revisione 3: Invio di blocchi compressi

In questa versione dell'applicazione viene usato un blocco compresso di invio dei dati. Questa modifica comporta un miglioramento significativo delle prestazioni.

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

Modifiche apportate a questa versione

Questa versione riflette le modifiche seguenti:

  • Gli aggiornamenti delle celle non vengono più serializzati.
  • Poiché viene usato un invio di blocco, l'applicazione non è più chatty.
  • La compressione dei dati viene usata, generando un'applicazione meno grassa.

C'è ancora un problema con questa versione dell'applicazione; il rischio di deadlock esiste perché viene usato un invio di grandi dimensioni senza ricevere. Il server invia un byte per ogni 3 byte ricevuti. Ciò potrebbe causare un deadlock se la dimensione del buffer di ricezione è inferiore a 1000 byte per questa applicazione di esempio.

Metriche delle prestazioni chiave

Le metriche delle prestazioni seguenti sono espresse in Round Trip Time (RTT), Goodput e Protocol Overhead. Per una spiegazione di questi termini, vedere l'argomento Terminologia di rete .

Questa versione riflette le metriche delle prestazioni seguenti:

  • Tempo cella - .002*RTT
  • Goodput - 2 kilobyte/RTT
  • Sovraccarico del protocollo - 14%

Del sovraccarico del 14%, il 6% proviene dalle intestazioni Ethernet e l'altro 8% è dall'avvio e dall'avvio della connessione.

Miglioramento di un'applicazione lenta

Terminologia di rete

Versione di base: un'applicazione con prestazioni molto scarse

Revisione 1: Pulizia dell'ovvio

Revisione 2: Riprogettazione per un minor numero di connessione

Miglioramenti futuri