zoukankan      html  css  js  c++  java
  • Nginx服务器的处理机制

    下面了解一下Nginx的优势

      Nginx的优势在于处理大量并发请求,结合多进程和异步机制

      启动后会产生多个工作进程,进程可在配置中配置

      每个工作进程使用异步非阻塞方式,处理多个客户端请求,如果不能立即得到结果则去做其他事情,当得到结果后会通知工作进程

      得到通知后去响应客户端请求

    现在就有一个问题,IO调用是如何把自己的状态通知给工作进程呢

      解决该问题的方案有两种

        1.间隔一段时间去检查是否执行完毕,但会造成时间和资源的浪费[不推荐]

        2.IO调用完成后能主动通知工作进程,使用select/poll/epoll/kqueue 被称为事件驱动模型

    那么下面来讲解一下Nginx的事件驱动模型

      事件驱动模型是Nginx服务器保障完成功能和良好性能的重要机制

      大多数网络服务器使用

        事件发送器每传递一个请求,将目标对象放入待处理事件列表,使用非阻塞I/O方式调用事件处理器来处理改请求

        事件驱动处理库采用多路IO复用方法,常见的有select模型,poll模型和epoll模型

       select库

          linux和windows平台都支持,基本接口也相同,参数略有不同

          调用select()函数,等待事件发生,轮询所有事件,检测是否相应的事件发生

       poll库

          windows平台不支持,与select工作方式基本相同

          创建一个关注事件的描述符集合,等待事件发生,轮询描述集合,检查有没有事件发生

          与select的区别:

            select库需要为读事件,写事件,异常事件分别创建一个集合,分别轮询三个集合

            poll库只有一个集合,在每个描述符对应的结构分别设置读事件,写事件,或者异常事件,轮询的时候,同时检查三种事情是否发生

          poll是select的优化实现

          编译过程中没有指定其他高性能事件驱动模型库,默认自动编译该库

       epoll库

          epoll库最NB,和select,poll库有很大不同,epoll属于poll库的一个变种

          将描述符列表的管理交给内核负责,一旦事件发生,内核把发生的描述符通知给进程,避免了轮询整个描述符列表

       rtsig模型

          rtsig模型不常用,不介绍了

       其他事件驱动模型

          kqueue模型:一般在Mac OS X平台,和epoll没有本质区别

          /dev/poll模型:支持Unix衍生平台,在该平台建议使用

          eventport模型:用于支持Solaris10以上平台模型

          

  • 相关阅读:
    Jquery选择器 选择一个不存在的元素 为什么不会返回 false
    flask接收前台的form数据
    virtualenv
    easy_install与pip 区别
    Linux安装Python2.7
    能者多劳
    西游记的管理智慧:选择团队领导人的核心奥秘
    最高管理智慧:留个缺口给别人
    团队管理的1 4 7法则
    Spring的AOP面向切面编程
  • 原文地址:https://www.cnblogs.com/wangheng669/p/8192213.html
Copyright © 2011-2022 走看看