Создание параллельного сервера с установлением логического соединения с помощью пула потоков/процессов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание параллельного сервера с установлением логического соединения с помощью пула потоков/процессов



Цель работы: изучить методы создания серверов, используя алгоритм параллельной обработки запросов с пулом готовых потоков/процессов.

В работе приведен пример параллельного сервера с установлением логи- ческого соединения. Для обеспечения параллельного формирования ответов на запросы клиентов сервер использует несколько (пул) заранее подготовленных потоков/процессов.

 

Пул потоков/процессов

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

Что такое пул потоков? В жизни мы очень часто встречаемся с организа- цией пула. Например, когда вы идете в столовую, вы встречаетесь с пулом под- носов. Клиентов может быть намного меньше, чем подносов, и наоборот. Когда подносов много, они лежат без дела; когда подносов мало, клиенты ждут, пока они освободятся. Число подносов, то есть размер пула, заранее определяется так, чтобы в большинстве случаев клиенты не ждали подносов. Однако случа- ются часы пик, когда клиентов очень много. Просто нереально выделить от- дельный поднос каждому клиенту, да и не нужно это. Клиент все равно будет стоять в очереди к кассе, так что траты на подносы не принесут реальных вы- год. Это, конечно, очень далекая и несовершенная аналогия, но она показывает, что в природе и жизни пул чего-либо очень часто используется как наиэффек- тивнейшая схема обслуживания запросов.

При использовании метода предварительного создания разработчик пре- дусматривает создание в программе ведущего сервера N ведомых процессов или потоков с началом ее выполнения (рисунок 7). Каждый ведомый процесс использует средства, доступные в операционной системе, для перехода в режим ожидания поступления запроса. После появления запроса один из ожидающих ведомых процессов начинает выполнение и обрабатывает этот запрос. После завершения обработки запроса ведомый процесс не заканчивает свою работу, а возвращается к выполнению кода, предусматривающего ожидание очередного запроса.

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


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

Клиент 2
Клиент 1
Однако такой метод имеет и недостатки: необходимо соблюдать край- нюю осторожность при использовании ресурсов. Чтобы понять, с чем это свя- зано, рассмотрим постоянный ведомый процесс, в котором предусмотрено рас- пределение небольшого объема памяти при поступлении каждого запроса, но после завершения обработки запроса освобождение памяти не происходит из-за ошибки в программе. Хотя такая проблема может появиться не сразу, со време- нем данный ведомый процесс может исчерпать все адресное пространство.

 

 


 


Пул имеющихся сво- бодных дочерних про- цессов


 

…….


 

 

Рисунок 7 – Предварительное создание сервером дочерних процессов

 

 

Методические указания по созданию параллельного сервера с установлением логического соединения TCP, использующего пул потоков для обработки запросов клиента

Теперь приведем текст примера сервера TCP – параллельного сервера с установлением логического соединения с пулом потоков. Данный пример реа- лизует прикладной протокол DAYTIME.

Новый поток может быть создан в любое время путем вызова функции

pthread _create. Операционная система ограничивает максимально  допустимое


количество параллельных потоков, равно как и максимально допустимое коли- чество параллельных процессов.

 

Серверная часть

 

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <time.h> #include <unistd.h> #include <stdio.h> #include <pthread.h>

 

char * daytime() { time_t now; now=time(NULL); return ctime(&now);

}

 

void * udp_thread(int * p_sock) { int sock=*p_sock;

for (;;) {

struct sockaddr from; int len=sizeof(from); char buf[81]; memset(buf,0,81);

recvfrom(sock,buf,80,0,&from,&len); printf("udp incoming:%s",buf);

 

memset(buf,0,81); strncpy(buf,daytime(),80);

 

sendto(sock,buf,strlen(buf),0,&from,len); puts("answer udp");

}

 

return NULL;

}

 

void * tcp_thread(int *p_sock) { int sock=*p_sock;

for (;;) {

int c_sock=accept(sock,NULL,NULL); char buf[81];

memset(buf,0,81); strncpy(buf,daytime(),80); write(c_sock,buf,strlen(buf)); shutdown(c_sock,0); close(c_sock);


puts("answer tcp");

}

return NULL;

}

 

int main() {

struct sockaddr_in addr; memset(&addr,0,sizeof(addr));

addr.sin_family=AF_INET; addr.sin_port=htons(1212); addr.sin_addr.s_addr=INADDR_ANY;

 

int sock;

const int threads=10; pthread_t tid;

 

if (fork()) { sock=socket(PF_INET,SOCK_STREAM,0); bind(sock,(struct sockaddr *)&addr,sizeof(addr)); listen(sock,5);

for (int i=0; i<threads; i++)/*создаем 10 потоков*/ pthread_create(&tid,NULL,&tcp_thread,&sock);

}

else { sock=socket(PF_INET,SOCK_DGRAM,0);

bind(sock,(struct sockaddr *)&addr,sizeof(addr)); for (int i=0; i<threads; i++)/*создаем 10 потоков*/

pthread_create(&tid,NULL,&udp_thread,&sock);

}

 

pthread_join(tid,NULL); //возобновление работы потока

 

return 0;

}

 

Индивидуальные задания

Разработать приложение, реализующее архитектуру «клиент-сервер». Не- обходимо реализовать параллельный сервер с установлением логического со- единения (TCP), использующего пул потоков для обработки запросов клиентов. Логику взаимодействия клиента и сервера реализовать следующим образом.

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

2. Разработать приложение-поисковик слов. На сервере хранится опреде- ленный текст. На клиентской части вводится слово для поиска и передается серверу, а тот в свою очередь осуществляет поиск этого слова в тексте и воз- вращает клиенту все предложения, в которых встречается это слово.


3. Разработать приложение-счетчик букв. На клиентской части вводится строка и передается серверу, а тот в свою очередь осуществляет подсчет глас- ных и согласных букв и возвращает этот результат клиенту.

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

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

6. Разработать приложение для определения счастливчика лотереи. На сервере хранятся номера билетов. На каждом билете имеются 10 случайных чи- сел от 1 до 100. На клиентской части вводятся 10 чисел от 1 до 100, и сервер должен определить номер билета, в котором имеется больше всего совпадений с введенными числами.

7. Разработать приложение для определения призовых мест на соревнова- ния по прыжкам в длину. На сервере хранятся фамилии участников соревнова- ний, их идентификационные номера. На клиентской части вводятся результаты прыжков по каждому идентификационному номеру, а сервер возвращает фами- лии спортсменов, занявших 1, 2 и 3 места.

8. Разработать приложение по поиску квартиры для покупки. Стоимости квартир и их адреса хранятся на сервере. На клиентской части вводится пре- дельная сумма для покупки квартиры, а сервер возвращает клиенту адреса всех квартир с такой или меньшей стоимостью.

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

10. Разработать программу учета проданных товаров продуктового мага- зина. На сервере хранится информация о наличии некоторых товаров. Клиент вводит с клавиатуры запрос на покупку того или иного товара. Назад он полу- чает результат (информацию о том, что товар отмечен как купленный). Клиент имеет возможность просматривать на сервере информацию о товарах (наиме- нование товаров, исходное количество, проданное количество, остаток на кла- де), также может ее редактировать, добавлять и удалять.

11. Разработать программу учета сдачи экзаменов студентами. На сервере хранится информация о номерах групп студентов, ФИО студентов, сдаваемых студентами предметах. Клиент имеет возможность заполнения ведомостей сту- дентов по тому или иному предмету, редактирования ведомостей, их просмот- ра.

12. Разработать программу поиска фрагмента текста. На сервере хранится исходный текст. Клиент имеет возможность ввести у себя некоторый искомый


фрагмент текста и получить от сервера результат поиска (есть или нет такой фрагмент в тексте сервера). Клиент имеет возможность редактирования исход- ного текста на сервере.

13. Разработать программу учета проданных мобильных телефонов. На сервере хранится информация о наличии некоторых мобильных телефонов в магазине. Клиент вводит с клавиатуры запрос на покупку того или иного мо- бильного телефона. Назад он получает результат (информацию о том, что товар отмечен как купленный). Клиент имеет возможность просматривать на сервере информацию о телефонах (наименование телефона, его модель, исходное ко- личество, проданное количество, остаток на кладе), также может ее редактиро- вать, добавлять и удалять.

14. Разработать программу учета проданных билетов на железной дороге. Клиент посылает на сервер запрос на просмотр проданных, забронированных или свободных билетов. В ответ от сервера он получает необходимую инфор- мацию. Клиент имеет возможность на сервере редактировать информацию о билетах (номера поезда, время отправки, цена билетов).

15. Разработать программу контроля качества знаний у студентов при выполнении теста. Клиент посылает на сервер некоторый выполненный им тест (условно можно взять 5 вопросов с ответами на них). Программа сервера про- веряет результат и посылает оценку клиенту. При количестве ошибок менее 2-х ставится оценка 10, более 1-й и менее 4-х ошибок – оценка 7, более 3 ошибок - оценка 4. Определить минимальное и максимальное количество ошибок.

 

 

Контрольные вопросы

1. Что лежит в основе метода распараллеливания потоков/процессов?

2. Каковы принципы работы пула потоков?

3. В чем заключаются преимущества данного метода?

4. Главные недостатки данного метода?

5. С помощью каких функций производится работа с пулом потоков?


ЛИТЕРАТУРА

1 Пынькин, Д. А. Системное программное обеспечение локальных вычисли- тельных сетей: учеб.-метод. комплекс / Д. А. Пынькин, И. И. Глецевич [электрон- ный ресурс]. – Минск: 2006. http://abitur.bsuir.by/m/12_116608_1_49901.pdf.

2 http://cpprog.narod.ru/articles.html

3 Олифер, В. Г. Компьютерные сети. Принципы, технологии, протоколы / В. Г. Олифер, Н. А. Олифер. – СПб., Питер, 2002.

4 Таненбаум, Э. Компьютерные сети / Э. Таненбаум. – СПб.: Питер, 2002.

5 Дилип, Н. Стандарты и протоколы Интернета / Н. Дилип; пер. с англ. – М.: Издательский отдел «Русская Редакция» ТОО «Channel Trading Ltd.», 1999. – 672 c.

6 Щербо, Б. М. Стандарты по локальным вычислительным сетям: справоч- ник / Б. М. Щербо, В. К. Киреичев, С. И. Самойленко; под ред. С. И. Самой- ленко. – М.: Радио и связь, 1990.

7 Снейдер, Й. Эффективное программирование TCP/IP. Библиотека про- граммиста / Й. Снейдер. – СПб.: Питер, 2002.

8 Компьютерные сети. Учебный курс. – М.: «Русская Редакция» ТОО

«Channel Trading». 1997.

9 Челлис, Дж. Основы построения сетей: учеб. пособие для специалистов MCSE / Дж. Челлис, Ч. Перкинс, М. Стриб. – М.: Лори 1997.

10 Петерсен, Р. LINUX: руководство по операционной системе: В 2 т. / Р. Петерсон; пер. с англ. – 2-e изд., перераб. и доп. – Киев: Издательская груп- па BHV, 1999.

11 Кью, П. Использование UNIX. Специальное издание / П. Кью; пер. с англ. – М.: СПб., Киев: Издательский дом «Вильямс», 1999.

12 Сетевые средства Microsoft Windows NT Server 4.0; пер. с англ. – СПб.: BHV – Санкт-Петербург, 1998.

13 Ларионов, А. М. Вычислительные комплексы, системы и сети: учебник для вузов / С. А. Майоров, Г. И. Новиков – Л.: Энергоатомиздат, 1987.

14 Шпаковский, Г. И. Архитектура параллельных ЭВМ: учеб. пособие для вузов / Г. И. Шпаковский. – Минск: Университетское, 1989.

15 Кулаков, Ю. А. Компьютерные сети / Ю. Л. Кулаков, Г. М. Луцкий. – Киев: ЮНИОР, 1998.



Поделиться:


Последнее изменение этой страницы: 2019-12-15; просмотров: 373; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.128.199.162 (0.038 с.)