三种工作模式
prefork
- 多进程模式,一个进程一个连接,每个进程相对来讲都是独立的,这个过程会用到select机制来通知;
- . 特点:稳定,响应快,消耗大量cpu和内存,keep-alive长连接占据问题;
- 注解:keep-alive长连接,TCP连接在发送后任然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。减少重复请求的次数,进而加快访问速度,实现长连接要客户端和服务端都支持长连接
worker
- 多进程多线程,一个进程开多个线程,每一个线程处理一个连接,但通知机制还是select不过可以接受更多的请求;
- 特点:节省资源,兼容性不好,稳定性不高,适用于高并发场景,keep-alive长连接占据问题
event
- worker的升级版,把服务器进程和连接进行分离,基于异步I/O模型。请求过来后进程并不处理请求,通过epoll机制来通知请求是否完成;在这个过程中,进程本省一直处于空闲状态,可以一直接收用户请求,可以实现一个进程响应多个用户请求。并且event模式对于keep-alive连接处理也有优化,event模式有单独的线程处理keep-alive长连接,执行完毕后,有允许它释放。这样增强了高并发场景下的请求处理能力。
- 特点:支持海量级高并发负载,消耗资源少,但其对https支持的不完美
不同模式效率不同,主要用于调优.查看当前使用模式
httpd -V | grep "Server MPM"