本文次要介绍以下问题:

1.Apache工作模式介绍

2.Apache过程模型剖析

3.Apache与Nginx有什么区别

Apache是世界上使用最宽泛的Web服务器,同时也是一个基于多过程的Http服务器。跟Nginx相比,Apache在解决申请的形式是同步阻塞形式,也就是说Apache在面对高并发申请时会呈现阻塞。

一、Apache工作模式

Apache的运行形式有prefork、worker、event三种模式。

1.prefork这种模式叫做预派生模式,在Apache启动的时候,就事后派生了一些子过程,期待客户端连贯。这样做有个益处是能够缩小在运行过程中频繁创立和销毁过程,升高零碎开销。每个派生进去的子过程只有一个线程,再同一时间内只能解决一个申请。这种模式不适宜高并发的利用场景,过程开的太多了,过程之间切换会耗费大量CPU工夫;过程太少,大并发量申请会呈现期待的情景。

2.workerworker模式应用多个子过程,每个子过程有多个线程、因为应用的是线程去解决申请,耗费内存小,适宜高流量的申请,然而如果某个过程呈现问题,那么这个过程下的线程都会呈现问题,即稳定性不是很好。
3.eventevent模式为了解决keep-alive放弃长连贯呈现的一种工作模式,应用keep-alive长连贯的时候,某个线程会始终被占用,即便两头没有申请,须要等到超时才会被开释,所以这个时候就呈现了event的工作模式。

二、Apache过程模型剖析

apache解决申请是同步阻塞形式,所以面对高并发时,apache没有任何劣势。
每一个申请达到,apache都会去fork一个子过程去解决这个申请,直到这个申请处理完毕。低并发时,这种模式没有什么问题。然而在高并发时,这种模式就成为鸡肋。
高并发时,一个客户端占用一个过程,过程数量有多少,并发解决能力就有多少。然而操作系统能够创立的过程数量是无限的。多过程就会存在过程间的切换问题,而过程间的切换调度势必会造成CPU的额定耗费。当过程数量达到成千上万的时候,过程间的切换就占了CPU大部分的工夫片,而真正的过程的执行反而占了CPU的一小部分,造成系统资源的节约。

三、Apache与Nginx有什么区别

对于Nginx过程模型能够看Nginx实现高并发的原理剖析这边文章,比照会发现:两者最外围的区别在于 apache 是同步多过程模型,一个连贯对应一个过程,而 nginx 是异步的,多个连贯能够对应一个过程。

Nginx绝对于Apache的长处:

轻量级,同样起web 服务,比apache 占用更少的内存及资源抗并发,Nginx 解决申请是异步非阻塞的,而Apache 则是同步阻塞型的,在高并发下Nginx 能放弃低资源低消耗高性能高度模块化的设计,编写模块绝对简略社区沉闷,各种高性能模块出品迅速啊

Apache 绝对于Nginx 的长处:

rewrite ,比 Nginx 的 rewrite 弱小模块超多,根本想到的都能够找到bug 绝对比拟少,比较稳定。Nginx 的 bug 绝对较多