首页 » 网站建设 »

深入理解prefork, worker和event模式

2019年3月27日 / 77次阅读
APACHE

Apache的MPM(Multi-Processing Module)多处理模块,有三种工作模式,分别是:prefork,worker,evert。本文总结这三种工作模式的工作机制,以便于同学们选择配置。

1, prefork模式

prefork是apache这块著名的web server最早支持的模式,顾名思义,prefork就是提前fork,fork就是创建新的进程。

Apache在启动之初,会预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的系统开销。每个子进程只有一个执行线程,在一个时刻,只能处理一个请求。

优点:成熟稳定,兼容所有新老模块,同时不需要担心线程安全的问题。

缺点:一个进程相对占用更多的系统资源,会消耗更多的内存。而且,prefork模式不擅长处理高并发请求,在高并发的这种场景下,prefork会将请求放进队列中,一直等到有可用进程,请求才会被处理。

现在基本上已经很少会用到prefork模式了。

2, worker模式

prefork模式是预派生进程,系统开销很大,而worker模式可以理解为预派生线程,减少系统开销,更好的支持高并发场景。

worker模式也会预先fork多个子进程(数量比较少),然后每个子进程再创建更多的线程(Thread),同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,系统开销更少,因为线程能够共享父进程的内存空间,这样内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些。

有些人会觉得奇怪,那么这里为什么不完全使用多线程呢,还要引入多进程?

原因主要是需要考虑系统的稳定性,如果一个线程异常挂掉了,会导致父进程(相对于线程而言的父进程)连同其它正常的子线程都挂了(因为它们都是同属于一个父进程,这个父进程是指创建进程的父进程)。为了防止这样的异常场景出现时,不至于所有线程都不可用,所以采用多个进程,每个进程再创建多个线程的模式。

worker模式示意图

worker模式示意图

优点:线程占据更少的内存,相同内存下可以创建更多线程等待请求,高并发下表现更优秀。

缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。

(推荐一篇:如何配置apache的worker模式

3, event模式

event模式是Apache MPM模块中最新的模式,从2.4版本开始,event模式就成了默认模式。

event模式和worker模式很相似,也是由父进程创建子进程,子进程再创建一堆线程来处理请求。它们最大的区别在于,event试图解决在keep-alive的场景下,线程资源长期被占用的问题。在event模式中,会有一个专门的线程来管理这些keep-alive类型的连接,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,允许它释放。这样增强了高并发场景下的请求处理能力。

读到这里,可能需要先学习一下HTTP协议的keep-alive机制,以及Apache如何配置keep-alive

event模式在遇到某些不兼容的模块时会失效,并会自动回退到worker模式。官方自带的模块,全部是支持event MPM的。以前很多人说event模式不支持https,现在其实也是支持的。

event模式原理示意图

event模式原理示意图

为什么event模式能够更好地支持高并发的场景?

worker模式下,每个线程都可以接收请求,由于keep-alive机制,单独一个线程对于多个请求只能顺序的处理。而在event模式中,接收请求的线程不做其它事情,只负责将处理的任务分给其它线程,假设在一个HTTP的连接中(其实就是TCP连接),接收线程同时(理论上应该是连续)收到10个请求,接收线程会将这10个请求分给10个不同的线程处理,这样并发性能就会更好。

因此,event模式在面对高并发场景时,性能更好。但是,event模式性能的释放,也依赖于底层的硬件支持。在配置一般的服务器上,event模式的性能不一定能释放出来。我见过用ab做的性能测试,在其它条件都一样的情况下,event模式的性能反而略逊于worker模式。

如何查看Apache使用的是哪种模式?

xinlin@iZ234Z:~/maixj.net/tools$ /usr/local/apache-2.4/bin/apachectl -l
Compiled in modules:
core.c
mod_so.c
http_core.c
worker.c

本文链接:https://www.maixj.net/wz/prefork-worker-event-20753

相关文章

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top