수정 버전 3: 압축 블록 보내기
이 버전의 애플리케이션에서는 데이터의 압축된 블록 전송이 사용됩니다. 이렇게 변경하면 성능이 크게 향상됩니다.
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 );
이 버전의 변경 내용
이 버전은 다음과 같은 변경 내용을 반영합니다.
- 셀 업데이트는 더 이상 직렬화되지 않습니다.
- 블록 보내기가 사용되므로 애플리케이션은 더 이상 수다스럽지 않습니다.
- 데이터 압축이 사용되어 지방이 적은 애플리케이션이 생성됩니다.
이 버전의 애플리케이션에는 여전히 문제가 있습니다. 수신 없이 대용량 보내기가 사용되므로 교착 상태의 위험이 존재합니다. 서버는 수신된 3바이트마다 1바이트를 보냅니다. 이 샘플 애플리케이션에 대한 수신 버퍼 크기가 1000바이트 미만인 경우 교착 상태가 발생할 수 있습니다.
주요 성능 메트릭
다음 성능 메트릭은 RTT(왕복 시간), Goodput 및 프로토콜 오버헤드로 표현됩니다. 이러한 용어에 대한 설명은 네트워크 용어 항목을 참조하세요.
이 버전은 다음과 같은 성능 메트릭을 반영합니다.
- 셀 시간 — .002*RTT
- Goodput — 2KB/RTT
- 프로토콜 오버헤드 — 14%
14%의 오버헤드 중 6%는 이더넷 헤더에서, 나머지 8%는 연결 시작 및 중단에서 비롯됩니다.
관련 항목