apache如何创建线程?

apache如何创建线程?

几天前,我与同事交谈时,其中一人提到 apache 为每个连接创建一个线程。

他所说的每个连接到底是什么意思?

假设我有一个包含三张图片的 HTML 文件。当我访问该文件时,我的浏览器会向服务器请求三张图片。那么...apache 会为每个图片创建一个线程吗?

答案1

“假设我有一个包含三幅图像的 HTML 文件。当我访问该文件时,我的浏览器会向服务器请求三幅图像。那么...apache 会为每个图像创建一个线程吗?”

是的,如果以下两点成立:首先,浏览器必须使用三个单独的连接来请求这三张图片。其次,这三个请求在服务器端的处理中必须重叠。

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

答案2

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

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

Unix    prefork
Windows mpm_winnt

预分叉MPM 是基于进程的,不使用线程。Unix 环境中的替代方案是工人MPM,使用多个进程,每个进程使用多个线程。

mpm_winntMPM 使用 1 个服务器进程、1 个子进程以及子进程内的多个线程。

相关内容