加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 站长资讯 > 评论 > 正文

Nginx服务器的高性能原理怎么使用

发布时间:2021-05-06 14:11:02 所属栏目:评论 来源:互联网
导读:如上图,我们将服务器分成了三个模块: 进程池 事件响应 事件注册 当浏览器请求到达服务器之后,首先连接到(3)请求服务进程,并注册一个事件,当请求发送数据的时候,这个时候会产生一个读事件,这个时候会有(2)事件响应进程会响应,将事件交给(1)进程池处理

如上图,我们将服务器分成了三个模块:

  1. 进程池
  2. 事件响应
  3. 事件注册

当浏览器请求到达服务器之后,首先连接到(3)请求服务进程,并注册一个事件,当请求发送数据的时候,这个时候会产生一个读事件,这个时候会有(2)事件响应进程会响应,将事件交给(1)进程池处理,同时再注册一个写事件。当进程池将请求处理完成之后,会响应写事件将处理的结果返回给浏览器。

那么IO复用所复用的是什么呢?

IO复用就是用一个进程来响应真实的请求事件。本质上复用的是进程。

Select与Epoll

当有读写事件发生了,事件守护进程响应交给进程池处理,同时再注册一个写事件,但是进程池怎么知道是哪个socket有事件发生了呢?所以每次有事件发生的时候,事件响应进程就会遍历一下所有的socket连接句柄,判断一下是否有事件发生,这种响应事件的方式就被称为Select模型。

怎么去优化呢?如果每次有事件发生,如果能知道是确切的哪个socket连接的事件,效率就很高了,这样方式就是Epoll模型。 举个例子

  • 假如餐馆有人要结账,服务员就跟老板说一声:“有人要结账”,老板不知道是哪一桌要结账,就需要挨个问一遍,这样的方式就是select,时间复杂度O(n)。
  • 假如餐馆有人要结账,服务员就跟老板说一声:“5号桌要结账”,这样的方式就是epoll,时间复杂度O(1)。

从大的方面了解一个高性能的服务器演化的过程,总结一下:池的概念会很大的提高性能,本次说到的是进程池,改成线程池(其实是多进程多线程模式)也是一样。

扩展:引入池的优化手段,很常见。例如,数据库连接池等等。感兴趣的可以查一下。

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读