关于Apache的两种工作模式prefork和worker

prefork模式

这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

worker模式

此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

控制这个MPM的最重要的指令是,控制每个子进程允许建立的线程数的ThreadsPerChild指令,和控制允许建立的总线程数的MaxClients指令。


从定义上看,在PV流量下worker模式明显优于prefork,但事实上并未如此,下面引用PHP 官方文档


PHP只是一个粘合剂。他将众多的第三方模块儿库粘结到一起,然后提供给使用者一个直观易懂的统一语言接口,让我们觉得他们就是一个整体。PHP的易用和强大要依赖于一个稳定和强大的运行平台。他需要操作系统,Web服务器和第三方模块儿库融合到一起。他们当中任何一个挂了,PHP都需要通过各种途径迅速找到问题,并解决。如果我们使用一种没有完全隔离运行线程,没有完全隔离内存空间,并且没有一个强大的记录每个需求的容器的Web服务器来运行PHP时,PHP就会变的很容易出问题。

如果我们想使用一个多线程多进程的模块儿,可以关注一下PHP的FastCGI的配置。在FastCGI模式下,PHP运行在自己的内存空间里。

官方原文:

PHP is glue. It is the glue used to build cool web applications by sticking dozens of 3rd-party libraries together and making it all appear as one coherent entity through an intuitive and easy to learn language interface. The flexibility and power of PHP relies on the stability and robustness of the underlying platform. It needs a working OS, a working web server and working 3rd-party libraries to glue together. When any of these stop working PHP needs ways to identify the problems and fix them quickly. When you make the underlying framework more complex by not having completely separate execution threads, completely separate memory segments and a strong sandbox for each request to play in, further weaknesses are introduced into PHP's system.

  • If you want to use a threaded MPM, look at a FastCGI configuration where PHP is running in its own memory space.



你可能感兴趣的:(apache,worker,prefork,工作模式)