Редакция 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 полученных байта. Это может привести к взаимоблокировке, если размер буфера приема для этого примера приложения меньше 1000 байт.

Ключевые метрики производительности

Следующие метрики производительности выражаются в времени кругового пути (RTT), Goodput и издержках протокола. Описание этих терминов см. в разделе Сетевая терминология .

Эта версия отражает следующие метрики производительности:

  • Время ячейки — .002*RTT
  • Goodput — 2 килобайта/RTT
  • Издержки протокола — 14 %

Из 14 % накладных расходов 6 % — из заголовков Ethernet, а остальные 8 % — от запуска и удаления подключения.

Улучшение медленного приложения

Терминология сети

Базовая версия: очень низкопроизводительное приложение

Редакция 1. Очистка очевидного

Редакция 2. Перепроектирование для уменьшения количества подключений

Будущие улучшения