<!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>

<!-- XXX: Needed here: a brief discussion or reference to instructions
on how to choose and load an MPM, how to figure out what MPM you are
currently using, and what MPMs are the defaults on various
platforms. -->



<!--#include virtual="footer.html" -->

</body>
</html>

