# Мульти-процессные модули (МП-модули)

Этот документ описысывает, что такое мульти-процессные модули и как они используются в HTTP-сервере Apache.

# Введение

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

В Apache 2.0 модульная архитектура была расширена наиболее общими функциями веб-сервера. Теперь сервер поставляется с набором мульти-процессных модулей (МП-модулей), ответственных за соединение с сетевыми портами компьютера, за приём запросов и за координацию их обработки дочерними процессами.

Расширение модульной архитектуры до этого уровня даёт два важных преимущества:

- Apache может более аккуратно и эффективно работать в самых разных операционных системах. В частности, версия Apache для Windows теперь работает намного более эффективно, благодаря тому, что МП-модуль mpm_winnt может использовать собственные сетевые функции Windows взамен сетевых функций уровня POSIX. Эта касается и других операционных систем, для которых разработаны специальные МП-модули.
- Сервер может быть настрен более оптимально для нужд конкретного сайта. Например, для сайтов, требующих значительной масштабируемости, может быть выбран многопоточный МП-модуль, такой как worker, а для сайтов, требующих большей стабильности или совместимости со старым ПО, может быть использован prefork. Кроме того, также предоставляются специальные возможности, такие как обслуживание различных хостов процессамми с привилегиями различных пользователей (perchild).

На уровне пользователя МП-модули почти не отличаются от всех остальных модулей Apache. Основное различие состоит в том, что с сервером может быть скомпилирован один и только один МП-модуль. Список доступных МП-модулей можно посмотреть в каталоге модулей.

# Выбор МП-модуля

МП-модуль должен быть выбран на этапе конфигурации, а затем скомпилирован вместе с сервером, чтобы стать его частью. Компиляторы способны оптимизировать многие функции при условии, что используются потоки, однако они должны знать еще на этапе компиляции, используются ли потоки или нет. Поскольку некоторые МП-модули используют потоки в ОС Unix, а другие - нет, Apache будет работать лучше, если МП-модуль был встроен в сервер на этапе компиляции.

Чтобы подключить желаемый МП-модуль к Apache, используйте аргумент --with-mpm=название скрипта `./configure`, где название - это название желаемого МП-модуля.

Однажды откомпилировав сервер, всегда можно определить, какой МП-модуль был выбран, используя команду `./httpd -l`, которая выведет список всех модулей, откомпилированных вместе с сервером, в том числе и название МП-модуля.

# Подключённые по умолчанию МП-модули

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

BeOS | beos
Netware | mpm_netware
OS/2 | mpmt_os2
Unix | prefork
Windows | mpm_winnt