Подведение итогов
16.12. Резюме
Для повышения производительности параллельного сервера могут применяться два основных метода: предварительное создание и отсроченное создание ведомых процессов. пластиковые двери гармошка для гостинной
Метод предварительного создания позволяет оптимизировать задержку, поскольку предусматривает создание ведомых процессов еще до того, как в них возникает необходимость. Ведущий сервер открывает сокет для применяемого им общепринятого порта, а затем выполняет предварительное создание всех необходимых ведомых процессов или потоков. Поскольку ведомые процессы наследуют этот сокет, каждый из них может ожидать поступления запросов. Операционная система передает каждый входящий запрос одному из ведомых процессов. Метод предварительного создания имеет большое значение для параллельных серверов без установления логического соединения, поскольку в них затраты времени на обработку запроса обычно невелики, поэтому издержки создания потока или процесса по сравнению с ними являются весьма значительными. Метод предварительного создания позволяет также разрабатывать эффективные проекты параллельных серверов без установления логического соединения для мультипроцессорных систем.
В методе отсроченного создания используется подход, предусматривающий создание ведомого процесса только в случае необходимости. Ведущий сервер приступает к последовательной обработке каждого запроса, но с этого момента устанавливает таймер. Он создает параллельный ведомый процесс для обработки запроса, если установка таймера истекает до завершения работы ведущим процессом. Метод, отсроченного создания успешно применяется в тех случаях, если продолжительность обработки зависит от запроса или сервер должен проверять правильность запроса (в частности, проверять права доступа клиента). Метод отсроченного создания позволяет исключить издержки создания ведомого процесса при обработке коротких запросов или запросов, которые содержат ошибки. пластиковые двери гармошка для гостинной - то, что надо!
Хотя эти методы оптимизации работы сервера могут показаться взаимно противоположными, оба они вытекают из одного основного принципа: ослабление жесткой причинно-следственной связи между степенью распараллеливания работы сервера и числом запросов, ожидающих обработки, способствует повышению производительности сервера.
Безусловно, для предотвращения возможности внести изменения в это значение одновременно двумя ведомыми потоками должен использоваться мьютекс.
Материал для дальнейшего изучения
Сетевая файловая система (NFS — Network File System) описана в главах 24 и 25. Метод предварительного создания используется во многих реализациях NFS в целях предотвращения потери запросов.
Упражнения
- Доработайте один из серверов, представленных в качестве примера в предыдущих главах таким образом, чтобы в нем использовался метод предварительного создания. Насколько изменится в данном случае производительность сервера?
- Доработайте один из серверов, представленных в качестве примера в предыдущих главах, таким образом, чтобы в нем использовался метод отсроченного создания. Насколько изменится в данном случае производительность сервера?
- Проверьте на многопроцессорном компьютере сервер без установления логического соединения, в котором используется метод предварительного создания. Обязательно примените для проверки такие клиенты, которые передают пакеты запросов. Насколько зависит допустимая степень распараллеливания от числа процессоров? Если между ними нет зависимости, объясните, с чем это связано.
- Разработайте алгоритм сервера, в котором применяется сочетание методов отсроченного создания и предварительного создания. Как можно ограничить максимальную степень распараллеливания?
- Исходя из условий предыдущего упражнения, ответьте, как можно использовать для управления степенью распараллеливания средства передачи сообщений, если они предусмотрены в операционной системе?
- Какие преимущества могут быть достигнуты путем объединения методов, описанных в настоящей главе, в сервере, использующем один поток выполнения для обеспечения псевдопараллельной обработки?
- Как можно применить методы, описанные в этой главе, для создания мультисервисного сервера?
- Постройте и измерьте характеристики трех версий сервера с предварительным созданием ведомых процессов: (а) позволяющей ведомым процессам параллельно вызывать функцию accept, (б) предусматривающей использование разделяемого мьютекса для обеспечения того, чтобы только один ведомый процесс одновременно вызывал на выполнение функцию accept, и (в) предусматривающей применение функции flock. Какая из этих версий работает быстрее? Изменяются ли характеристики сервера в зависимости от числа ведомых процессов?