系统相关
首页 > 系统相关> > apache和nginx的区别

apache和nginx的区别

作者:互联网

apache / nginx都是web应用服务(web容器)

 

一:Apache拥有丰富的模块组件支持,稳定性强,BUG少,动态内容处理强。

处理请求方式:异步阻塞型

1:Apache提供一系列多重处理模块,通过这些多重处理模块来使用操作系统的资源,对进程和线程池进行管理,控制处理用户请求。

2:Apache提供了三种多重处理模块:mpm_prefork、mpm_worker、mpm_envent

参考文献:http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html

                  https://blog.51cto.com/balich/1743798

1):mpm_prefork:成熟稳定兼容性好,不适合处理高并发

  

默认的工作模式是Prefork MPM,这种模式采用的是预派生子进程方式,用单独的子进程来处理请求,子进程间互相独立,互不影响,大大的提高了稳定性,每个子进程中只有一个线程,在一个时间点内,只能处理一个请求,进程都会占用内存,所以消耗系统资源过高;

2):mpm_worker:适合处理高并发。但是处理长连接(keep-alive)时比较差,只能等超时释放

  

Worker MPM是Apche 2.0版本中全新的支持多进程多线程混合模型的MPM,由于使用线程来处理HTTP请求,所以效率非常高,而对系统的开销也相对较低,Worker MPM也是基于多进程的,但是每个进程会生成多个线程,由线程来处理请求,这样可以保证多线程可以获得进程的稳定性;

3):mpm_event:worker升级版,会分配专门的管理线程解决长连接资源浪费

 

这个是 Apache中最新的模式,在现在版本里的已经是稳定可用的模式。它和 worker模式很像,最大的区别在于,它解决了 keep-alive 场景下 ,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,挂在那里等待,中间几乎没有请求过来,一直等到超时)。

event MPM中,会有一个专门的线程来管理这些 keep-alive 类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理几个请求了,实现了异步非阻塞。

event MPM在遇到某些不兼容的模块时,会失效,将会回退到worker模式,一个工作线程处理一个请求。官方自带的模块,全部是支持event MPM的。

 

二:Nginx轻量级,占用资源少,负载均衡,高并发处理强,静态内容处理高效。

处理请求方式:异步非阻塞型

1:Nginx是通过异步的、非阻塞的、事件驱动的方式在实现的。Nginx的工作进程是单线程的,每个线程可以异步的处理大量的用户请求。

 

 

三:比较:

nginx比apache:更轻量,占用资源少,抗高并发,处理静态页面性能更好

apahce比nginx:更稳定,模块多,处理动态页面更好

 

四:核心区别

apache是同步多进程模型,一个连接对应一个进程

nginx是异步的,多个连接(万级别)可以对应一个进程

 

标签:mpm,请求,区别,处理,MPM,nginx,线程,apache,进程
来源: https://www.cnblogs.com/iguide/p/11756707.html