我可以: 邀请好友来看>>
ZOL论坛 > 技术论坛 > Nginx实现高速并发处理的原理详解
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

Nginx实现高速并发处理的原理详解

12浏览 / 0回复

zo33n5

zo33n5

0
精华
68
帖子

等  级:Lv.4
经  验:2254
  • Z金豆: 342

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:北京
  • 注  册:2020-05-08
  • 登  录:2021-01-15
发表于 2021-01-13 12:46:31
电梯直达 确定
楼主


  众所周知,Nginx是当下最流行的Web服务器,它具有很强的负载均衡,反向代理,邮件代理以及静态缓存的功能。在提供这些功能的同时,Nginx的性能也极其优秀,可以轻松支持百万、千万级的并发连接,能够为Tomcat、Django等性能不佳的Web应用抗住绝大部分外部流量。那么,Nginx是如何实现高速并发处理呢?这就要从它优秀的架构设计来说起。


  框架结构


  如下图所示,Nginx结合采用多进程和IO多路复用的结构处理并发客户请求。


  Master进程主要负责信号处理,监控和管理Worker进程。 Master进程本身不处理具体业务。Worker进程处理具体业务,包括处理连接请求和网络读写事件的处理。多个worker进程可以独立地处理各自的客户连接。Worker进程之间通过信号量和共享内存进行通信。

  Nginx实现高速并发处理的原理详解


  通过配置与系统CPU等量的worker进程,可以实现某一个进程绑定某一个特定CPU从而减少系统开销。在每一个worker进程处理多个client并发连接请求时,Nginx 采用IO多路复用技术在一个进程内同时处理多个client的网络读写事件。与多进程/线程处理多连接请求模型相比,IO多路复用可以减少大量的进程调度带来的系统开销,从而提高系统整体的处理性能。

  并发处理方式

  Nginx实现高速并发处理的原理详解


  网络服务器在处理并发处理方式,如上图socket处理流程所示,根据accept得到新连接以后是启用新的进程/线程还是直接在原来本进程内处理,分为如下两种方式。


  一种是多进程/线程方式,这种方式为每一个新来的连接生成一个新的进程/线程来单独处理。另外一种是IO多路复用,这种方式在一个进程/线程中维护所有的连接的socket,通过事件处理的方式依次处理所有连接上的网络事件。

  多线程模型如下:

  Nginx实现高速并发处理的原理详解


  在多进程/线程的模型中,根据accept在新老进程中的位置又分为两种。一种类型是accept在父进程中进行,每次accept以后,fork一个新进程或者创建一个新线程来处理新accept的连接。一种类型是父进程在listen调用以后,fork出多个进程或者创建多个线程分别进行accept.

  IO多路复用模型如下:

  Nginx实现高速并发处理的原理详解


  IO多路复用又称为event driven IO。就是在同一个进程内同时处理多路IO,进而提高系统吞吐量。一般是通过维护一个连接池,当某个连接有数据到达,通知进程来进行数据处理。Nginx支持多种并发连接请求,比如select,poll,epoll,kqueue(针对bsd)等等,这些请求可以通过配置文件进行选择。一般在linux上epoll的效率要比select,poll高很多。


  综上所述,Nginx通过本身优秀的框架设计,加上内核对并行网络处理的支持,得到了非常好的并发处理性能。

  


高级模式
论坛精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL论坛您有任何使用问题和建议 您可以 联系论坛管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表