答:Apache是一个模块化服务,支持的模块比较多,采用servlet处理模型,同步阻塞模型,工做模式多变,对于高并发的场景处理速度会比较慢,运行稳定。支持异步读写,能够经过正则表达式作动静分离。正则表达式
答:httpd有三种工做模式。缓存
prefork模式能够算是很古老可是很稳定的模式。httpd服务在刚启动时,就会fork出一些子进程(默认为5个),一个子进程对应一个线程,而后等待request进来,而且老是试图保持一些空闲的子进程,之因此这样作,是为了减小频繁建立和销毁进程的开销。在同一个时间点内,一个线程只能处理一个进程。安全
worker模式和prefork模式比起来,是使用了多进程+多线程的模式,它也是预先fork了几个子进程,每一个子进程可以生成一些服务线程和一个监听线程,该监听线程及接入请求并传递给服务线程处理和应答。worker工做模式占用的内存较少,在高并发下表现还算优异。不过必需要考虑线程安全的问题,由于多个子进程是共享父进程的内存地址的。若是使用keep-alive的长链接方式,也许中间几乎没有请求,这是就会发生阻塞,线程被挂起,须要一直等待到超时才会被释放。若是过多的线程,就这样被占据,也会致使在高并发场景下的无服务线程可用。(该问题一样会发生在prefork模式)。多线程
这是Apache最新的工做模式,它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,线程被长期被占用的的资源浪费问题。并发
event工做模式中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候偶,将请求传递给服务线程,执行完毕后,又容许它释放。这样,一个线程就能处理多个请求了,实现异步非阻塞。异步
event工做模式在遇到某些不兼容的模块时,它会失效,并退回到worker模式,一个工做线程处理一个请求。官方自带的模块,所有都是支持event工做模式的。ide