Алгоритмы параллельного сервера

Опубликовано в Технологии > Серверные технологии

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

  • для формирования ответа требуется выполнение значительного объема операций ввода/вывода;
  • требуемое время обработки запросов резко изменяется от одного запроса к другому;
  • сервер работает на компьютере с несколькими процессорами.

В первом случае применение в сервере средств параллельной обработки запросов дает возможность более рационально использовать ресурсы процессора и периферийных устройств, даже если на компьютере установлен только один процессор. Пока процессор занимается вычислениями при формировании одного ответа, устройства ввода/вывода могут передавать в память данные, которые требуются для формирования других ответов. Во втором случае квантование времени позволяет использовать один процессор для обработки запросов, требующих небольшого объема вычислений, не задерживая ответы на них на то время, которое требуется для обработки более трудоемких запросов. В третьем случае параллельное выполнение задач на компьютере с несколькими процессорами позволяет использовать один процессор для формирования ответа на один запрос, в то время как другой процессор формирует ответ на другой. В действительности, большинство параллельных серверов адаптируется к существующему аппаратному обеспечению автоматически: получая доступ к большему объему аппаратных ресурсов (например, к большему числу процессоров), они работают быстрее. Купить ДПК, Жидкое дерево, декинг у ООО БУМ ПОЛИМЕРОВ на Торговой площадке.

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

8.21. Один ведущий и несколько ведомых потоков

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

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

8.22. Алгоритм параллельного сервера без установления логического соединения

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

Алгоритм 8.3. Параллельный сервер без установления логического соединения

  1. Ведущий поток. Создать сокет и выполнить его привязку к общепринятому адресу предоставляемой службы. Оставить сокет неподключенным.
  2. Ведущий поток. Вызывать в цикле функцию recvfrom для приема очередного запроса от клиента и создавать новые ведомые потоки (возможно, в новом процессе) для формирования ответа.
  1. Ведомый поток. Работа потока начинается с получения конкретного запроса от ведущего потока, а также доступа к сокету.
  2. Ведомый поток. Сформировать ответ согласно прикладному протоколу и отправить его клиенту с использованием функции sendto.
  3. Ведомый поток. Завершить работу (т.е. работа ведомого потока завершается после обработки одного запроса).

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

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