mpm.html.en revision e91db09809d2a865b5826ecd233477a05e7b86d5
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Apache Multi-Processing Modules (MPMs)</TITLE>
</HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<BODY
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#000080"
ALINK="#FF0000"
>
<!--#include virtual="header.html" -->
<h1 align="center">Apache Multi-Processing Modules</h1>
<p>The Apache HTTP Server is designed to be a powerful and flexible
web server that can work on a very wide variety of platforms in a
range of different environments. Different platforms and different
environments often require different features, or may have different
ways of implementing the same feature most efficiently. Apache has
always accommodated a wide variety of environments through its modular
design. This design allows the webmaster to choose which features
will be included in the server by selecting which modules to load
either at compile-time or at run-time.</p>
<p>Apache 2.0 extends this modular design to the most basic functions
of a web server. The server ships with a selection of
Multi-Processing Modules (MPMs) which are responsible for binding to
network ports on the machine, accepting requests, and dispatching
children to handle the requests.</p>
<p>Extending the modular design to this level of the server
allows two important benefits:
<ul>
<li>Apache can more cleanly and efficiently support a wide variety of
operating systems. In particular, the Windows version of Apache is
now much more efficient, since <a
href="mod/mpm_winnt.html">mpm_winnt</a> can use native networking
features in place of the POSIX layer used in Apache 1.3. This benefit
also extends to other operating systems that implement specialized
MPMs.</li>
<li>The server can be better customized for the needs of the
particular site. For example, sites that need a great deal of
scalability can choose to use a threaded MPM like <a
href="mod/mpmt_pthread.html">mpmt_pthread</a>, while sites requiring
stability or compatibility with older software can use a <a
href="mod/prefork.html">preforking MPM</a>. In addition, special
features like serving different hosts under different userids
(<a href="mod/perchild.html">perchild</a>) can be provided.</li>
</ul>
<p>At the user level, MPMs appear much like other Apache modules.
The main difference is that one and only one MPM must be loaded
into the server at any time. The list of available MPMs
appears on the <a href="mod/">module index page</a>.</p>
<h2 align="center">Choosing an MPM</h2>
<p>MPMs must be chosen during configuration, and compiled into the server.
Compilers are capable of optimizing a lot of functions if threads are used,
but only if they know that threads are being used. Because some MPMs use
threads on Unix and others don't, Apache will always perform better if the
MPM is chosen at configuration time and built into Apache.</p>
<p>To actually choose the desired MPM, use the argument --with-mpm=
<EM>NAME</EM> with the /configure script. <EM>NAME</EM> is the name of
the desired MPM.</p>
<p>Once the server has been compiled, it is possible to determine which
MPM was chosen by using <code>/httpd -l</code>. This command will list
every module that is compiled into the server, including the MPM.</p>
<h2 align="center">MPM Defaults</h2>
<ul>
<li> BeOS: mpmt_beos</li>
<li> OS/2: spmt_os2</li>
<li> Unix: mpmt_pthread </li>
<li> Windows: winnt</li>
</ul>
<!--#include virtual="footer.html" -->
</body>
</html>