本文主要介绍以下问题:
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 相对较多
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。