当前位置: 首页 > 知识库问答 >
问题:

ApachePrefork与WorkerMPM

郑琦
2023-03-14

查看Apache配置文件,我看到定义了Prefork和Worker MPM。有什么区别,Apache使用的是哪一个?

共有3个答案

胡俊贤
2023-03-14

更多细节请看一下这个。它指的是Apache如何处理多个请求。预处理是默认的,它启动许多Apache进程(这里默认为2个,不过我相信可以通过httpd.conf进行配置)。Worker MPM将为每个请求启动一个新线程,我想这会提高内存效率。从历史上看,Apache使用了prefork,因此它是一个经过更好测试的模型。线程仅在2.0中添加。

谯嘉懿
2023-03-14

Apache的多处理模块(MPM)负责绑定到机器上的网络端口,接受请求,并分派子级来处理请求(http://httpd.apache.org/docs/2.2/mpm.html).

它们与任何其他Apache模块一样,只是在任何时候都必须将一个且只有一个MPM加载到服务器中。在配置期间选择mpm,并使用参数--with mpm=NAME和配置脚本将其编译到服务器中,其中NAME是所需mpm的名称。

Apache将为每个操作系统使用默认的MPM,除非在编译时选择不同的MPM(例如在Windowsmpm_winnt默认使用)。以下是操作系统及其默认MPM的列表:

  • BeOSbeos
  • 网络软件mpm_netware
  • OS/2mpmt_os2
  • Unix/Linuxprefork(Apache版本≥2.4的更新:preforkWorker,或事件,取决于平台功能)
  • Windowsmpm_winnt

要检查哪些模块被编译到服务器中,请使用命令行选项-l(这里是留档)。例如,在Windows安装上,您可能会得到以下内容:

> httpd -l
Compiled in modules:
  core.c
  mod_win32.c
  mpm_winnt.c
  http_core.c
  mod_so.c

从版本2.2开始,这是可用的核心功能和MPM模块列表:

  • core-始终可用的核心Apache HTTP服务器功能

现在,谈谈preforkworker之间的区别。

preforkMPM

实现了一个非线程的预分叉Web服务器,它以类似于Apache 1.3的方式处理请求。它适用于需要避免线程以兼容非线程安全库的站点。它也是隔离每个请求的最佳MPM,这样单个请求的问题就不会影响任何其他请求。

workerMPM实现了一个混合的多进程多线程服务器,并提供了更好的性能,因此,除非您使用的是包含非线程安全库的其他模块,否则最好使用它(另请参见本讨论或本服务器故障)。

吉玉宸
2023-03-14

Prefork和worker是apache提供的两种MPM类型。两者各有优缺点。

默认情况下,mpm是线程安全的prefork。

Prefork MPM使用多个子进程,每个子进程有一个线程,每个进程一次处理一个连接。

Worker MPM使用多个子进程,每个子进程具有多个线程。每个线程一次处理一个连接。

有关更多详细信息,请访问https://httpd.apache.org/docs/2.4/mpm.html和https://httpd.apache.org/docs/2.4/mod/prefork.html

 类似资料:
  • 在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?

  • 问题内容: 为了为 HTML5 Doctype 定义字符集,我应该使用哪种表示法? 短: 长: 问题答案: 在HTML5中,它们是等效的。使用较短的一个,更容易记住和键入。浏览器支持很好,因为它是为向后兼容而设计的。

  • 连接的多个输入都相当于Yes的时候才会输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:今天15:10:00,响起猫叫声小闹钟 工作原理 当所有的输入都是Yes的时候,与节点才输出Yes。

  • 问题内容: 似乎有三种 相同的 方法可以独立于平台获取依赖于平台的“文件分隔符”: 我们如何决定何时使用哪个? 它们之间甚至有什么区别吗? 问题答案: 可以通过调用命令行参数或使用命令行参数覆盖 获取默认文件系统的分隔符。 获取默认文件系统。 获取文件系统的分隔符。请注意,作为一种实例方法,在需要代码在一个JVM中对多个文件系统进行操作的情况下,可以使用该方法将不同的文件系统传递给代码(而不是默认

  • 问题内容: 我今天刚刚与一些同事讨论了python的db-api fetchone vs fetchmany vs fetchall。 我确定每个应用程序的用例都取决于我正在使用的db-api的实现,但是总的来说,fetchone,fetchmany,fetchall的用例是什么? 换句话说,以下等效项是什么?还是其中之一比其他人更受青睐?如果是这样,在哪些情况下? 问题答案: 我认为这确实取决于