为了应对不同的平台和不同的环境产生的各种不同的需求,也为了在具体的平台或环境下达到最佳的效果,Apache在web服务器的基础功能方面(端口绑定、接收请求等)也同样采用了模块化设计,这个Apache的核心模块就叫做多路处理模块(Multi-Processing Module,简称MPM),例如:mpm_beos
、mpm_event
、mpm_netware
、mpmt_os2
、mpm_prefork
、mpm_winnt
、mpm_worker
。如果条件允许,我们可以根据实际需求将指定的MPM模块编译进我们自己的Apache中(Apache的是开源的,允许用户自行编译)。不过,如果在编译时我们没有选择,Apache将按照如下表格根据不同的操作系统自行选择对应的MPM模块,这也是Apache针对不同平台推荐使用的MPM模块。
| 不同操作系统上默认的MPM模块 |
| — |
| 操作系统 | MPM模块 | 描述 |
| Windows | mpm_winnt | 专门针对Windows操作系统而优化设计的MPM模块 |
| Unix/Linux | mpm_prefork,mpm_worker | 主要应用于Unix/Linux平台的Apache服务器 |
| BeOS | mpm_beos | 由Be公司开发的一种多媒体操作系统,官方版已停止更新 |
| Netware | mpm_netware | 由NOVELL公司推出的一种网络操作系统 |
| OS/2 | mpmt_os2 | 一种最初由微软和IBM共同开发的操作系统,现由IBM单独开发(微软放弃OS/2,转而开发Windows) |
由于在平常的开发工作中,BeOS、NetWare、OS/2等操作系统并不常见,这里我们主要针对Windows和Unix/Linux操作系统上的MPM模块来进行讲解:
1、mpm_winnt模块
mpm_winnt
模块是专门针对Windows操作系统而优化设计的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
2、mpm_prefork模块
mpm_prefork
模块主要应用于Unix/Linux平台的Apache服务器,其主要工作方式是:当Apache服务器启动后,mpm_prefork
模块会预先创建多个子进程(默认为5个),当接收到客户端的请求后