Apache三种工作模式
我们都知道Apache有三种工作模块,分别为prefork、worker、event 。
prefork:多进程,每个请求用一个进程响应,这个过程会用到select机制来通知 。
worker:多线程,一个进程可以生成多个线程,每个线程响应一个请求,但通知机制还是select不过可以接受更多的请求 。
event:基于异步I/O模型,一个进程或线程,每个进程或线程响应多个用户请求,它是基于事件驱动(也就是epoll机制)实现的 。
prefork的工作原理
如果不用“–with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM.它所采用的预派生子进程方式也是 Apache1.3中采用的模式 。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一 。
worker的工作原理
相对于prefork,worker是2.0版中全新的支持多线程和多进程混合模型的MPM 。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器 。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性,这种MPM的工作方 式将是Apache2.0的发展趋势 。
event 基于事件机制的特性
一个进程响应多个用户请求,利用callback机制,让套接字复用,请求过来后进程并不处理请求,而是直接交由其他机制来处理,通过epoll机制来通知请求是否完成;在这个过程中,进程本身一直处于空闲状态,可以一直接收用户请求 。可以实现一个进程程响应多个用户请求 。支持持海量并发连接数,消耗更少的资源 。
如何提高Web服务器的并发连接处理能力
有几个基本条件:
1.基于线程,即一个进程生成多个线程,每个线程响应用户的每个请求 。
2.基于事件的模型,一个进程处理多个请求,并且通过epoll机制来通知用户请求完成 。
3.基于磁盘的AIO(异步I/O)
4.支持mmap内存映射,mmap传统的web服务器,进行页面输入时,都是将磁盘的页面先输入到内核缓存中,再由内核缓存中复制一份到web服务器上,mmap机制就是让内核缓存与磁盘进行映射,web服务器,直接复制页面内容即可 。不需要先把磁盘的上的页面先输入到内核缓存去 。
刚好,Nginx 支持以上所有特性 。所以Nginx官网上说,Nginx支持50000并发,是有依据的 。
Nginx优异之处
传统上基于进程或线程模型架构的web服务通过每进程或每线程处理并发连接请求,这势必会在网络和I/O操作时产生阻塞,其另一个必然结果则是对内存或CPU的利用率低下 。生成一个新的进程/线程需要事先备好其运行时环境,这包括为其分配堆内存和栈内存,以及为其创建新的执行上下文等 。这些操作都需要占用CPU,而且过多的进程/线程还会带来线程抖动或频繁的上下文切换,系统性能也会由此进一步下降 。另一种高性能web服务器/web服务器反向代理:Nginx(Engine X),nginx的主要着眼点就是其高性能以及对物理计算资源的高密度利用,因此其采用了不同的架构模型 。受启发于多种操作系统设计中基于“事件”的高级处理机制,nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制 。在nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每个worker可以并行处理数千个的并发连接及请求 。
Nginx 工作原理
Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等 。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信 。主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行 。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品
Nginx 安装非常的简单 , 配置文件非常简洁(还能够支持perl语法),Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够 不间断服务的情况下进行软件版本的升级。
Nginx 的诞生主要解决C10K问题
最后我们从各自使用的多路复用IO模型来分析:
select模型:(apache使用,由于受模块等限制,用的不多)
单个进程能够 监视的文件描述符的数量存在最大限制
推荐阅读
- 想从程序员变成架构师?看100篇架构设计的文章,不如干1次这个
- HTML、CSS、JavaScript、PHP、 MySQL 的学习顺序是什么?
- 菱角不能和什么一起吃
- 16大汽车故障应急技巧,你必须掌握
- 加拿大旅游攻略 - 从西到东,一次走完整个枫叶国
- 三九天和三伏天从什么时候开始 三九天指的是什么三伏天指的是什么
- 清明节|吴尊友:不建议清明假期跨省旅行、省内出行要注意防护
- 庐山云雾茶真假、品质鉴别方法
- 职业病防治|留学生归国后主要从事的是这些行业!
- 思维导图 抖音运营全攻略