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.
Argomenti correlati
-
Versione di base: un'applicazione con prestazioni molto scarse
-
Revisione 2: Riprogettazione per un minor numero di connessione