apache如何创build一个线程?

几天前我在和同事聊天时,其中一位提到apache每个连接都创build一个线程。

他每个连接的意思是什么?

比方说,我有一个包含三个图像的HTML文件。 当我访问该文件时,我的浏览器向服务器请求三个图像。 所以…阿帕奇使每个图像的线程?

“假设我有一个包含三个图像的HTML文件,当我访问这个文件时,我的浏览器向服务器请求了三个图像,所以… apache是​​否为每个图像创build一个线程?

是的,如果有两件事情是真的:首先,浏览器将不得不使用三个单独的连接请求三个图像。 其次,这三个请求在服务器端的处理中必须重叠。

如果浏览器只使用一个连接,使用HTTP / 1.1 keepalives,那么即使Apache为每个连接使用一个线程,仍然只有一个线程。 即使浏览器确实使用三个连接,如果浏览器在打开下一个连接之前closures了每个连接,Apache也许可以重新使用同一个线程,而不需要三个不同的线程来处理这三个连接。

Apache处理多个连接的方式是使用多处理模块(MPM) 。 默认MPM取决于您的服务器安装的环境。

两种最常见环境中的默认MPM如下所示:

Unix prefork Windows mpm_winnt 

prefork MPM是基于进程的,不使用线程。 Unix环境中的替代scheme是worker MPM,它使用多个进程和每个进程的多个线程。

mpm_winnt MPM在subprocess中使用1个服务器进程,1个subprocess和多个线程。