
116 Часть II. Компоненты программного обеспечения Weh
осуществлять переключения между различными процессами. Операционная система
выполняет процесс некоторый период времени (допустим, 10 мс или 100 мс), преж-
де чем переключиться на другой процесс. При этом создается впечатление, что каж-
дый процесс выполняется на отдельном компьютере. Кроме того, если процесс бло-
кируется ожиданием завершения системгюго вызова, операционная система начина-
ет выполнять другой процесс. Например, в то время как один процесс ожидает
получения да1Н1ых с диска, может выполняться другой процесс.
Web-сервер с управлением по процессам обычно имеет один главный процесс,
который прослушивает новые клиентские соединения. Для каждого нового соеди-
нения главный процесс создает отдельный процесс для обслуживания соединения.
После синтаксического анализа клиентского запроса и передачи ответа процесс за-
вершается. Завершение процесса после обработки запроса защищает систему от оп-
ределенных разновидностей ошибок программирования. Процесс, который не осво-
бождает ресурсы памяти, может постепенно захватывать все больше памяти. Это
называется утечкой памяти. При завершении процесса операционная система ав-
томатически освобождает ресурсы, выделенные процессу. Простота такого подхода
дает возможность разработчикам сосредоточиться на базовой составляющей сер-
верного программного обеспечения (синтаксический анализ запросов и создание
ответов). Большинство первых Web-серверов следовали этой модели, в том числе
серверы CERN и NCSA [KMR95].
Затраты на создание и завершение процесса составляют значительную часть ра-
боты при обработке HTTP-запроса для небольшого статического ресурса. Для сни-
жения этих затрат при запуске сервера могут быть созданы несколько процессов.
После создания процесс обслуживает запросы один за другим. При установлении
нового соединения главный процесс предоставляет существующий, неактивный
процесс для обработки запроса, а не создает новый процесс. Помимо снижения на-
грузки на сервер, использование существующего процесса сокращает время ожида-
ния пользователем. Однако подобный подход чувствителен к ошибкам программи-
рования, ведущим к утечкам памяти. Даже если программное обеспечение Web-
сервера свободно от таких ошибок, многие Web-сайты используют библиотеки или
сценарии, написанные сторонними программистами. Такое программное обеспече-
ние может вызвать утечки памяти. Для решения подобных проблем сервер может
завершать процесс после обработки определеппого числа запросов. В качестве аль-
тернативы Web-сервер может воспользоваться одним из усовершенствованных ме-
тодов управления памятью, которые ограничивают объем оперативной памяти, вы-
деляемый каждому процессу. Подробнее об этом будет говориться при рассмотре-
нии Web-сервера Apache в разделе
4.6.1.
Несмотря на повышение производительности, которое достигается при исполь-
зовании пула заранее созданных процессов, подход с управлением по процессам
имеет несколько ограничений. Во-первых, переключение с одного процесса на дру-
гой сопровождается дополнительными накладными расходами. Операционная сис-
тема должна сохранить информацию о выполняющемся процессе, обновить раз-
личные таблицы и списки перед загрузкой информации о следующем процессе;
в подходе с управлением по событиям структуры данных для активных запросов
хранятся в одном процессе. В модели с управлением по процессам переключение
с одного процесса на другой может потребовать загрузки данных с диска в опера-
тивную намять, или из оперативной памяти в кэш процессора. Большинство
Web-запросов не требуют значительных вычислений, поэтому переключение меж-
ду процессами составляет достаточно большую часть работы, выполняемой серве-
ром. Во-вторых, дополнительные затраты возникают, если процесс предполагает