🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
MPM: Multi Processing Modules,多处理模块 ### httpd >[success]httpd(prefork,worker),多进程模型,多路复用IO httpd(event),多线程模型,信号驱动IO ### 共同特点 在httpd启动之初,实现创建一些进程和线程,可以减少频繁创建和销毁进程的开销。 ### prefork (一个请求用一个进程响应) * 优点:适合处理并发比较小的情况,进程出问题不会相互影响,因此 稳定性好; * 缺点:进程占用的更多的系统资源和内存,因此对于并发比较大的情况难以适用;--> httpd 2.1 ![](http://i4.buimg.com/567571/74c25663c0bf9627.png) ~~~ <IfModule prefork.c> StartServers 8 #httpd启动时启动的进程数 MinSpareServers 5 #最小空闲进程数 MaxSpareServers 20 #最大空闲进程数 ServerLimit 256 #MaxClients的上限,若需调整ServerLimit,先要stop httpd,在调整ServerLimit,start httpd MaxClients 256 #启动进程的上限 MaxRequestsPerChild 4000 # 一个进程生命周期内响应进程数目上限 </IfModule> ~~~ ### worker (一个请求用一个线程响应, 启动多个进程,每个进程生成多个线程thread) * 优点:线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。 * 缺点:进程出问题会影响其下的线程;多个线程共享同一个进程的资源,但同时写一个资源会造成资源竞争,因此要对文件加锁,可能效果比不上prefork ![](http://i4.buimg.com/567571/d9b0c5aae081146e.png) ~~~ <IfModule worker.c> StartServers 4 #httpd启动时启动的进程数量 MinSpareThreads 25 #最小空闲线worker进程数 MaxSpareThreads 75 #最大空闲线worker进程数 ThreadsPerChild 25 #一个进程产生的线程数 MaxRequestWorkers 400 #最大工作进程数 MaxConnectionsPerChild 0 #一个进程生命周期内响应进程数目上限 </IfModule> ~~~ ### event (一个进程处理多个请求) --> httpd 2.4 * 和worker模型很像。不同的是解决了keepalive带来的资源占用。 * 专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,释放服务线程。 ![](http://i2.muimg.com/567571/516b66de8a7ea0a7.png) ~~~ <IfModule event.c> StartServers 3 #httpd启动时启动的进程数量 MinSpareThreads 75 #最小空闲worker线程数 MaxSpareThreads 250 #最大空闲worker线程数 ThreadsPerChild 25 #一个进程产生的线程数 MaxRequestWorkers 400 #最大工作进程数 MaxConnectionsPerChild 0 #一个进程生命周期内响应进程数目上限 </IfModule> ~~~