Revision Three: Compressed Block Send
In dieser Version der Anwendung wird ein komprimierter Blockversand der Daten verwendet. Diese Änderung führt zu einer erheblichen Leistungsverbesserung.
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 );
Änderungen in dieser Version
Diese Version spiegelt die folgenden Änderungen wider:
- Zellenupdates werden nicht mehr serialisiert.
- Da ein Block send verwendet wird, wird die Anwendung nicht mehr überschattet.
- Die Datenkomprimierung wird verwendet, was zu einer weniger fetten Anwendung führt.
Es besteht weiterhin ein Problem mit dieser Version der Anwendung. das Deadlockrisiko besteht, da ein großer Sendesenden ohne Empfang verwendet wird. Der Server sendet ein Byte für alle 3 empfangenen Bytes. Dies kann zu einem Deadlock führen, wenn die Empfangspuffergröße für diese Beispielanwendung kleiner als 1.000 Bytes ist.
Wichtige Leistungsmetriken
Die folgenden Leistungsmetriken werden in Roundtripzeit (ROUND Trip Time, RTT), Goodput und Protokollmoverhead ausgedrückt. Eine Erläuterung dieser Begriffe finden Sie im Thema Netzwerkterminologie.
Diese Version spiegelt die folgenden Leistungsmetriken wider:
- Zellenzeit – .002 * RTT
- Goodput – 2 Kilobyte/RTT
- Protokollaufwand – 14 %
6 % des Mehraufwands von 14 % stammen aus den Ethernet-Headern, und die anderen 8 % stammen aus dem Start und der Entfernung der Verbindung.