nginx和apache作为webserver的区别

1.两者所用的驱动模式不同。

nginx使用的是epoll的非阻塞模式事件驱动。

apache使用的是select的阻塞模式事件驱动。

2.fastcgi和cgi的区别

当用户请求web服务的时候,web会根据不同的需求将请求发送给不同个cgi来处理。

cgi模式,就是每次有请求的时候都fork一个新的进程来处理这个请求,处理完成后再关闭这个进程。

fastcgi模式,就是在服务器启动的时候根据配置文件建立几个cgi接口进程长驻在内存当中,当有请求连接的时候,cgi被激活来处理请求连接,处理完毕后cgi进程也不会关闭,会再次等待下次的请求连接。

因为进程的创建和关闭需要占用很大的内存和cpu资源,所以,相比较而言,处理多请求的情况下fastcgi模式的优点会不言而喻。

3.两者的支持模块

Apache支持的模块很多,而且也比较稳定。而nginx由于出现的比较晚,所以在这方面可能比不上Apache。

nginx本身就是一个反向代理服务器,而且支持7层负载均衡。

Apache的rewrit功能比nginx强大许多。

nginx是多线程的,而Apache是多进程的。

nginx是异步阻塞,而Apache是阻塞

nginx处理动态页面很鸡肋,一般只用与处理静态页面和反向代理。

Apache由于支持的模块比较多,可以支持比较多的动态页面。而且性能比较稳定。

如果需要性能,就使用nginx;如果需要稳定,就使用Apache。

3.1.1 阻塞和非阻塞:

阻塞和非阻塞指的是执行一个操作是等操作结束再返回,还是马上返回。

比如餐馆的服务员为用户点菜,当有用户点完菜后,服务员将菜单给后台厨师,此时有两种方式:

第一种:就在出菜窗口等待,直到厨师炒完菜后将菜送到窗口,然后服务员再将菜送到用户手中;第二种:等一会再到窗口来问厨师,某个菜好了没?如果没有先处理其他事情,等会再去问一次;

第一种就是阻塞方式,第二种则是非阻塞的。

3.1.2 同步和异步:

同步和异步又是另外一个概念,它是事件本身的一个属性。还拿前面点菜为例,服务员直接跟厨师打交道,菜出来没出来,服务员直接指导,但只有当厨师将菜送到服务员手上,这个过程才算正常完成,这就是同步的事件。同样是点菜,有些餐馆有专门的传菜人员,当厨师炒好菜后,传菜员将菜送到传菜窗口,并通知服务员,这就变成异步的了。其实异步还可以分为两种:带通知的和不带通知的。前面说的那种属于带通知的。有些传菜员干活可能主动性不是很够,不会主动通知你,,你就需要时不时的去关注一下状态。这种就是不带通知的异步。

对于同步的事件,你只能以阻塞的方式去做。而对于异步的事件,阻塞和非阻塞都是可以的。非阻塞又有两种方式:主动查询和被动接收消息。被动不意味着一定不好,在这里它恰恰是效率更高的,因为在主动查询里绝大部分的查询是在做无用功。对于带通知的异步事件,两者皆可。而对于不带通知的,则只能用主动查询。

追寻爱情,然后发现,爱,从来就是一件千回百转的事。

nginx和apache作为webserver的区别

相关文章:

你感兴趣的文章:

标签云: