多路处理模块

本文档描述了什么是多路处理模块以及它如何为Apache所使用。

简介

Apache HTTP服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服务器。不同的平台和不同的环境经常产生不同的需求,或是为了达到同样的最佳效果而采用不同的方法。Apache凭借它的模块化设计很好的适应了大量不同的环境。这一设计使得网站管理员能够在编译时和运行时凭借载入不同的模块来决定服务器的不同附加功能。

Apache2.0将这种模块化的设计延伸到了web服务器的基础功能上。这个版本带有多路处理模块(MPM)的选择以处理网络端口绑定、接受请求并指派子进程来处理这些请求。

将模块化设计延伸到这一层次主要有以下两大好处:

  • Apache可以更简洁、更有效地支持各种操作系统。尤其是在mpm_winnt中使用本地网络特性代替Apache1.3中使用的POSIX模拟层后,Windows版本的Apache现在具有更好的性能。这个优势借助特定的MPM同样延伸到了其他各种操作系统。
  • 服务器可以为某些特定的站点进行定制。比如,需要更好伸缩性的站点可以选择象workerevent这样线程化的MPM,而需要更好的稳定性和兼容性以适应一些旧的软件的站点可以用prefork

从用户角度来看,MPM更像其他的Apache模块。主要的不同在于:不论何时,必须有且仅有一个MPM被载入到服务器中。现有的MPM列表可以在模块索引中找到。

选择一个MPM

MPM必须在编译配置时进行选择,并静态编译到服务器中。如果编译器能够确定线程功能被启用,它将会负责优化大量功能。因为一些MPM在Unix上使用了线程,而另外一些没有使用,所以如果在编译配置时选择MPM并静态编译进Apache,Apache将会有更好的表现。

你可以在使用configure脚本时用 --with-mpm=_NAME_ 选项指定MPM,NAME就是你想使用的MPM的名称。

一旦服务器编译完成,就可以用 ./httpd -l 命令来查看使用了哪个MPM。这个命令将列出所有已经被编译到服务器中的模块,包括MPM。

默认的MPM

下表列出了不同操作系统上默认的MPM。如果你在编译时没有进行选择,这将是默认选择的MPM。

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