# 多处理模块(MPM)

本文档介绍了什么是多处理模块，以及 Apache HTTP 服务器如何使用它们。

# 介绍

Apache HTTP 服务器被设计为一个功能强大，并且灵活的 web 服务器， 可以在很多平台与环境中工作。不同平台和不同的环境往往需要不同 的特性，或可能以不同的方式实现相同的特性最有效率。Apache httpd 通过模块化的设计来适应各种环境。这种设计允许网站管理员通过在 编译时或运行时，选择哪些模块将会加载在服务器中，来选择服务器特性。

Apache HTTP 服务器 2.0 扩展此模块化设计到最基本的 web 服务器功能。 它提供了可以选择的多处理模块(MPM)，用来绑定到网络端口上，接受请求， 以及调度子进程处理请求。

扩展到这一级别的服务器模块化设计，带来两个重要的好处:

- Apache httpd 能更优雅，更高效率的支持不同的平台。尤其是 Apache httpd 的 Windows 版本现在更有效率了，因为 mpm_winnt 能使用原生网络特性取代在 Apache httpd 1.3 中使用的 POSIX 层。它也可以扩展到其它平台 来使用专用的 MPM。
- Apache httpd 能更好的为有特殊要求的站点定制。例如，要求 更高伸缩性的站点可以选择使用线程的 MPM，即 worker 或 event； 需要可靠性或者与旧软件兼容的站点可以使用 prefork。

在用户看来，MPM 很像其它 Apache httpd 模块。主要是区别是，在任何时间， 必须有一个，而且只有一个 MPM 加载到服务器中。可用的 MPM 列表位于 模块索引页面。

# 默认 MPM

下表列出了不同系统的默认 MPM。如果你不在编译时选择，那么它就是你将要使用的 MPM。

Netware | mpm_netware
OS/2 | mpmt_os2
Unix | prefork，worker 或 event，取决于平台特性
Windows | mpm_winnt

# 构建 MPM 为静态模块

在全部平台中，MPM 都可以构建为静态模块。在构建时选择一种 MPM，链接到服务器中。如果要改变 MPM，必须重新构建。

为了使用指定的 MPM，请在执行 configure 脚本 时，使用参数 `--with-mpm=NAME`。NAME 是指定的 MPM 名称。

编译完成后，可以使用 `./httpd -l` 来确定选择的 MPM。 此命令会列出编译到服务器程序中的所有模块，包括 MPM。

# 构建 MPM 为动态模块

在 Unix 或类似平台中，MPM 可以构建为动态模块，与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改 LoadModule 指令内容来改变 MPM，而不用重新构建服务器程序。

在执行 configure 脚本时，使用 `--enable-mpms-shared` 选项可以启用此特性。 当给出的参数为 `all` 时，所有此平台支持的 MPM 模块都会被安装。还可以在参数中给出模块列表。

默认 MPM，可以自动选择或者在执行 configure 脚本时通过 `--with-mpm` 选项来指定，然后出现在生成的服务器配置文件中。 编辑 LoadModule 指令内容可以选择不同的 MPM。