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

return 5;        

}

// Загрузка количества точек в буфер передачи

smsg[0]=p_numb;

smsg[1]=i_numb;

// Считывание исходных точек из файла в буфер передачи

for (i=2;i<p_numb*2+2;i++)

{

res=fscanf(finp, " %f", &smsg[i]);

if (res !=1)

{

printf ("Error #7: Can't get points from file '%s'",argv[1]);

return 7;

}

}

// Закрытие файла ввода

fclose(finp);

// Подключение к именованному каналу

coid = name_open("int_server", 0);

if (coid == -1)

{

printf("Error #2: Can't find server 'int_server'\n");

return 2;

}

// Отправка сообщения серверу

res=MsgSend(coid, smsg, (p_numb*2+2)*sizeof(float), rmsg, i_numb*sizeof(float)*2);

// Если результат не равен количеству запрошенных точек, то ошибка

if (res != i_numb)

{

printf("Error #8: Interpolation failed");

return 8;

}

// Открытие файла результатов

foutp=fopen(argv[2],"w");

if (foutp==NULL)

{

printf ("Error #9: Can't open output file %s.",argv [2]);

return 9;  

}

// Вывод рзультатов интерполяции в консоль и файл

printf("Time\tValue\n");

for (i=0;i<i_numb;i++)

{

printf ("%8.3f\t%8.3f\n",rmsg[2*i],rmsg[2*i+1]);

fprintf (foutp,"%8.3f\t%8.3f\n",rmsg[2*i],rmsg[2*i+1]);   

}

// Закрытие файла вывода результатов

fclose (foutp);

// Успешный выход из программы

return 0;

}
 Испытания приложений и оценка производительности

а) Рассмотрение примера на простом наборе данных

Входной файл:

5     20

0     6

1     7

2     6

3     10

4     5

Выходной файл:

0.000       6.000

0.211       7.450

0.421       7.982

0.632       7.896

0.842       7.445

1.053       6.847

1.263       6.273

1.474       5.856

1.684       5.688

1.895       5.819

2.105       6.256

2.316       6.967

2.526       7.879

2.737       8.876

2.947       9.802

3.158      10.459

3.368      10.608

3.579       9.969

3.789       8.220

4.000       5.000

График:

Рис. 2. Результаты интерполяции


Рис. 3. Временная диаграмма работы сервера.

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

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

б) Исследование производительности приложений при различных исходных данных и параметрах интерполяции

При исследовании производительности клиент-серверного приложения фиксировались следующие параметры: время одного цикла исполнения программы, время обработки сервером и клиентом, а также чистое время обработки клиентом без ожидания.

Производительность клиент-серверного приложения. Табл. 1.

Nисх

Nинт

Tц, мкс

Tсерв, мкс

Tкл, мкс

Tкл ч, мкс

5

20

1334

7

1327

425

10

50

2945

48

2897

784

20

100

7394

264

7130

1000

35

300

18145

3024

15121

2037

50

500

30826

7684

23142

4650