对Nginx和Apache模块开发的一点心得体会

简要先介绍一下:

1)nginx处理过程是异步的,类似于医院机构,效率比较高;apache处理过程是同步的,采用进程或者线程模型或者进程线程混合模型,请求过来一直处理到请求结束,中间过程一般不打断

2)各有各的优点,apache模块开发较简单,功能齐全,nginx模块开发较复杂,功能相对不齐全

3)apache抗压能力差,nginx抗压能力较好

由于apache采用的是进程或者线程模型,大量请求过来时,apache需要创建大量的线程或者进程来满足需求,cpu忙于进程间或者线程间的调度,做有用功的机会就变少,这会导致流进的请求数量和流出的处理数量越来越不匹配,apche又会创建更多的进程或者线程,结果往往容易形成恶性循环,直到无法响应客户端新的请求

nginx是基于事件机制的处理模型,单个请求不需要一个线程或者进程来陪伴到请求生命期的结束,抛弃了用户请求与进程之间的一对一关系,大量请求被os接管处理,而连接所耗资源相对较低,所以处理几万个连接是没有问题的

4)apache一般进程比较多,这会导致内存浪费问题或者内存共享问题,nginx一般只有几个进程,所以开发跟内存密切相关的,就比较容易些

相关推荐