假设有1000个人同一时刻请求php站点,这些请求传给apache服务器,这个时候apache服务器是怎么来工作的?
1.创建1000个进程来处理1000个请求?
2.创建很多个进程,这些进程又包含很多线程来处理1000个请求?
3.其他?
还有fast-cgi,和cgi及php-fpm区别。请用上述例子来阐述。
首先要跟LZ明确一些概念:
1、CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等
2、而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称为 PHP: FastCGI Process Manager
3、怎么工作的是看你搭建环境的时候使用哪一种工作模式来处理php脚本,当然,少不了的还有你的apache配置(连接数,进程数,线程数等),还有就是所使用的操作系统(不同操作系统对于进程和线程的支持不同,处理能力也不同)。
首先说系统层面吧,不同系统默认会使用不同的多处理模块(MPM),如下:
BeOS | beos |
Netware | mpm_netware |
OS/2 | mpmt_os2 |
Unix | prefork |
Windows | mpm_winnt |
可以使用apachectl -l 命令来查看当前系统使用哪一种MPM配置。
主要的区别是不同系统使用不同的配置,对于配置项的支持程度也不同。
一般包含以下这些配置项:
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
等等。。。。。。
然后就是apache层面的东西了,
看上面的说明,什么最大连接数啊,每个进程有多少个线程啊,每个进程处理多少个请求什么的,都是可以配置的。怎么处理其中一部分取决于你的配置的值。
然后就是php运行模式的层面了,
现在主流的运行模式是FastCGI,当然有很多以前的配置好的服务器会使用其他模式,具体用命令看一下或者看apache的配置文件就知道了。下面直接贴一段我以前mark下来的内容吧:
谢谢,看了你写的,懂得了不少。
apache就是创建1000线程来处理1000个请求.每个线程都要占用内存,所以apache服务器内存跟并发数是成正比的.
至于cgi那些就不懂了
是创建一定的进程或者线程具体看操作系统了,但肯定是少于1000的,比如200-300个,因为你创建301个时候其实第1个线程已经完成工作了,所以不需要1000个
创一个线程池,不断从线程池中拿线程。具体看配置。推荐两个书
Java_Socket.pdf
tomcat深入剖析.pdf
学到不少