美文网首页
nginx实现高并发的原理

nginx实现高并发的原理

作者: 青缘1990 | 来源:发表于2019-05-30 13:23 被阅读0次

Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器。

异步非阻塞

1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。

2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。

3、 master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。

worker 进程数,一般会设置成机器 cpu 核数。因为更多的worker 数,只会导致进程相互竞争 cpu,从而带来不必要的上下文切换

惊群现象

主进程(master 进程)首先通过 socket() 来创建一个 sock 文件描述符用来监听,然后fork生成子进程(workers 进程),子进程将继承父进程的 sockfd(socket 文件描述符),之后子进程 accept() 后将创建已连接描述符(connected descriptor)),然后通过已连接描述符来与客户端通信。

那么,由于所有子进程都继承了父进程的 sockfd,那么当连接进来时,所有子进程都将收到通知并“争着”与它建立连接,这就叫“惊群现象”。大量的进程被激活又挂起,只有一个进程可以accept() 到这个连接,这当然会消耗系统资源。

Nginx对惊群现象的处理

Nginx 提供了一个 accept_mutex 这个东西,这是一个加在accept上的一把共享锁。即每个 worker 进程在执行 accept 之前都需要先获取锁,获取不到就放弃执行 accept()。有了这把锁之后,同一时刻,就只会有一个进程去 accpet(),这样就不会有惊群问题了。accept_mutex 是一个可控选项,我们可以显示地关掉,默认是打开的。

主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

worker进程工作流程

当一个 worker 进程在 accept() 这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,一个完整的请求

什么是IO多路复用呢?

对于操作系统而言,IO多路复用就是要完成操作系统IO的请求。对于IO文件的请求,当一个IO流要进行文件处理的时候,要获取一组文件的描述符,当文件描述符还没有就绪时,那么它就在等待,直到描述符一旦就绪,马上上报系统通知的机制,告诉应用程序我准备就绪,你可以来操作了。这就是IO多路复用的方式。

这种机制处理起来就很高效,多路复用就是在一个线程里,交替并发的完成。复用的就是一个线程。

相关文章

  • Nginx实现高并发及原理

    关键词:nginx 1、nginx基本介绍 1.nginx高并发原理(多进程(单线程)+epoll实现高并发) 1...

  • Nginx实现高并发的原理

    如何提高Web服务器的并发连接处理能力 大概有几个基本条件: 基于线程,即一个进程生成多个线程,每个线程响应用户的...

  • nginx实现高并发的原理

    Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了”并...

  • 对高并发的思考

    近期很长的一段时间,都在学习总结,什么是高并发,怎么样实现高并发,接触了解的内容包括Nginx工作原理,Tomca...

  • Nginx 实现高并发

    面试题: Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错...

  • java 高并发中volatile的实现原理

    java 高并发中volatile的实现原理 摘要: 在多线程并发编程中synchronized和Volatile...

  • 【Nginx源码研究】Nginx的事件模块介绍

    运营研发团队 谭淼 一、nginx模块介绍 高并发是nginx最大的优势之一,而高并发的原因就是nginx强大的...

  • java并发

    1.并发编程中的锁 并发编程中的各种锁java高并发锁的3种实现Java并发机制及锁的实现原理 2.线程池核心线程...

  • nginx、swoole高并发原理初探

    阅前热身 为了更加形象的说明同步异步、阻塞非阻塞,我们以小明去买奶茶为例。 同步与异步 同步与异步的重点在消息通知...

  • 大型高并发与高可用的三层缓存架构总结

    对于高并发架构,毫无疑问缓存是最重要的一环,对于大量的高并发,可以采用三层缓存架构来实现,nginx+redis+...

网友评论

      本文标题:nginx实现高并发的原理

      本文链接:https://www.haomeiwen.com/subject/ebpmtctx.html