Разработка клиент-серверного приложения. Алгоритм круговой интерполяции. Реализация алгоритма интерполяции в виде клиент-серверного приложения, страница 4

            3.1.1. Один сервер один клиент.

Результаты для трех входных данных с предыдущего рисунка (три дуги).


           

Из диаграммы видно, что сама интерполяция требует гораздо меньше времени, чем файловые операции выполняемые клиентом (особенно вывод результатов интерполяции в файл).

Сервер выходит из Receive-блокированного состояния  4 раза — три раза выполняет запросы клиента на интерполяцию и один раз принимает пульс посылаемый клиентом при отключении от канала (в name_close посылается пульс).

Некоторые участки более подробно.


            Trace Log для сервера и клиента, в котором более подробно описаны события отраженные на диаграмме.



По временной диаграмме и трейс логу видно,что довольно много времени занимает выделение памяти, потому что интерполяция выполняется в первый раз, и нужно выделить память под результат. На временной диаграмме этому соответствует розовая линия, в Trace Log это событие 3183 — сервер находиться в состоянии блокировки WaitPage, то есть ожидает выделания страницы памяти. Выделение памяти занимает порядка 3.5 ms.

Выполнение интерполяции сервером для второй дуги графика.


            Trace Log:


По Trace Log можно определить сколько времени занимал прием сообщения, сколько времени интерполяция и сколько времени отправка результата.                               

Время передачи сообщения от клиента к серверу

196.100 us

Выполнение интерполяции

503.617 us

Время передачи ответного сообщения

350.553 us

Время реакции.

Время между вызовами MsgSendEnter() и MsgSendExit()

1.050 ms

Выполнение интерполяции для третей дуги.


           

Trace Log.


Временные характеристики:

Время передачи сообщения от клиента к серверу

237.100 us

Выполнение интерполяции

988.617 us

Время передачи ответного сообщения

281.988 us

Время реакции.

Время между вызовами MsgSendEnter() и MsgSendExit()

1.507 ms

Если провести сравнение характеристик выполнения интерполяций для каждой дуги, которые изображены на рисунке, то можно сделать следующие выводы.

Первая интерполяция имеет значительно большее время отклика из-за того, что происходит выделения памяти. Сам только процесс выделения памяти занимал порядка 3.5 ms.

Если сравнить интерполяцию второй и третей дуг, то для третей дуги время реакции больше так как она имеет больше точек(по графику видно). То есть результат закономерен. Чем больше точек — тем больше время реакции.

            3.1.2. Один сервер и множество клиентов.

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

·  Сервер запускается из IDE, вместе с сервером запускается Trace Log;

·  Клиенты запускаются на целевой платформе, для этого написан соответствующий скрипт, который так же можно запускать из IDE использую удаленный доступ через telnet.

Листинг 3.1.2. Скрипт запуска клиентов run_clients.sh

#!/bin/sh

cd Client_1

./CircularInterpolation_Client -l &

cd ../Client_2

./CircularInterpolation_Client -l &

cd ../Client_3

./CircularInterpolation_Client -l &

cd ../Client_4

./CircularInterpolation_Client -l &

cd ../Client_5

./CircularInterpolation_Client -l &

cd ../Client_6

./CircularInterpolation_Client -l &

cd ../Client_7

./CircularInterpolation_Client -l &

Timeline-диаграмма:


По диаграмме видно, что сервер опять же большую времени находится в ожидании. Время затрачиваемое на интерполяцию значительно меньше, чем время затрачиваемое на вывод результатов интерполяции в файл.