Revision Three: Compressed Block Send
In this version of the application, a compressed block send of the data is used. This change results in significant performance improvement.
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 );
Changes in this Version
This version reflects the following changes:
- Cell updates are no longer serialized.
- Since a block send is used, the application is no longer chatty.
- Data compression is used, resulting in a less fat application.
There is still an issue with this version of the application; the risk of deadlock exists since a large send is used with no receives. The server sends one byte for every 3 bytes received. This could cause a deadlock if the receive buffer size is less than 1000 bytes for this sample application.
Key Performance Metrics
The following performance metrics are expressed in Round Trip Time (RTT), Goodput, and Protocol Overhead. See the Network Terminology topic for an explanation of these terms.
This version reflects the following performance metrics:
- Cell Time — .002*RTT
- Goodput — 2 Kilobytes/RTT
- Protocol Overhead — 14%
Of the 14% overhead, 6% is from the Ethernet headers and the other 8% is from the connection startup and teardown.
Related topics