1.Apache prefork模型:
apache的默认的模型预派 生模式,有 一个主控制进程,然后 生成多个 子进程,使 用select模型,最 大并发1024,每个 子进程有 一个独 立的线程响应 用户请求,相对 比较占 用内存,但是 比较稳定,可以设置最 大和最 小进程数,是最古 老 的 一种模式,也是最稳定的模式,适 用于访问量 不 是很 大的场景。优点:稳定缺点: 大量 用户访问慢,占 用资源,1024个进程不 适 用于 高并发场景
2.Apache woker模型:
一种多进程和多线程混合的模型,有 一个控制进程,启动多个 子进程,每个 子进程 里 面包含固定的线程,使 用线程程来处理 请求,当线程不 够使 用的时候会再启动 一个新的 子进程,然后在进程 里 面再启动线程处理 请求,由于其使 用了 线程处理 请求,因此可以承受更 高的并发。优点:相 比prefork 占 用的内存较少,可以同时处理 更多的请求缺点:使用keepalive的长连接方式(会话保持状态),某个线程会 一直被占据,即使没有传输数据,也需要 一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在 高并发场景下的 无服务线程可 用。(该问题在prefork模式下,同样会发 生)
3. Apache event模型:
比worker多了一个监听进程Apache中最新的模式,2012年 发布的apache 2.4.X系列 正式 支持event 模型,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本 里 的已经是稳定可 用的模式。它和worker模式很像,最 大的区别在于,它解决了 keepalive场景下, 长期被占 用的线程的资源浪费问题(某些线程因为被keepalive,空挂在哪 里 等待,中间 几乎没有请求过来,甚 至等到超时)。event MPM中,会有 一个专 门的线程来管理 这些keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执 行 完毕后, 又允许它释放。这样增强了 高并发场景下的请求处理 能 力 。优点:单线程响应多请求,占据更 少的内存, 高并发下表现更 优秀,会有 一个专 门的线程来管理 keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执 行 完毕后, 又允许它释放缺点:没有线程安全控制