# 多处理模块(MPM)

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

# 介绍

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

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

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

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

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

# 选择 MPM

MPM 必须在编译前夕，配置时指定，然后编译到服务器程序中。 仅当编译器知道使用了线程时，它才有能力优化许多函数。

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

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

# 默认 MPM

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

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