nginx异步非阻塞理解

您所在的位置:网站首页 nginx是一个基于事件的web服务器 nginx异步非阻塞理解

nginx异步非阻塞理解

#nginx异步非阻塞理解| 来源: 网络整理| 查看: 265

nginx异步非阻塞理解? 看了一下午如何理解异步非阻塞,不是用生活举例的就是只是说某一点的,其实真的还是很不明白,最后只能通过nginx的异步非阻塞模型来稍微理解理解了,我也不拿什么生活的举例了因为我觉得那个东西只能说就是生往概念上靠,更不明白。

切入正题,看之前你要先知道***多路复用器***,这个参考我写的也行,但是我还没写完(20200821这天),开始说了。

这张图其实能很好的理解异步非阻塞,左边是nginx进程结构,右边是event queue processing cycle(事件队列处理周期),左边那张图有两个链表,上面的是epoll_creat建立的,另外一个是event queue(事件队列),上面的其实就是非阻塞,下面的就是异步,上面的链表不懂去看epoll,下面的链表我下文给你讲了,联合起来希望你能理解,不懂就跳过去。 在这里插入图片描述

异步非阻塞我们拆开说,先说他这个非阻塞代表什么,nginx为什么性能高呢,因为nginx用一个进程可以处理成千上万的请求,nginx为什么能用一个进程可以处理成千上万的请求呢?因为nginx网络io用的是多路复用器,多路复用器解决的就是阻塞问题,所以我们理解因为nginx使用了多路复用器模型所以叫非阻塞。怎么叫异步呢?比如有1万个请求,这一万个请求可以分为很多种,有的是请求静态资源,有的是转发请求到后端服务器,有的是直接请求动态数据,但是不管什么样的事其实都是io,你请求静态资源你要读静态资源吧,你转发请求到后端服务器你得读返回回来的数据吧,假设其中的一个请求是向后端服务器转发请求并返回,假如这时候网络情况不好5秒钟才能得到后端服务器的返回那其他9999个请求都要等着么?nginx肯定没这么傻对吧,nginx是处理到这个请求可能阻塞的地方(向后端服务器发送请求),然后就去处理另外一个请求了(比如处理其他请求静态资源的请求),那上一个请求怎么办呢?不可能不要了是吧,他会在注册一个事件(后端服务器5秒后返回后要做什么?把返回的数据响应给客户)注册事件的地方是一个链表也就是我前面说的event queue(事件队列),具体我也没看过注册进去的是什么,但是想一想应该是把请求后端服务器返回后要做什么注册进去,这里就是异步,为什么这就叫异步呢,nginx不会每次去轮询注册链表,问他有没有事件已经完成(后端服务器有没有返回),而是当请求后端服务器返回后直接就可以执行注册进去的事情,注册进去的事情其实就是把从后端服务器请求回来的数据响应给用户,这就是异步,组合起来就是异步非阻塞,其实也可以把顺序颠倒一下非阻塞异步但是这么读起来有点变扭,先这么理解吧,不理解话或者我写的不对的地方欢迎留言,一起学习。 最后,我觉得这个这个东西今天不明白也别钻牛角筋,也就面试的时候会问问你,平时你用的时候也没必要去说的这个么细。

新理解

又看了自己的帖子感觉讲的很垃圾,再写写最新的理解吧,异步非阻塞,还是拆成非阻塞和异步,非阻塞指的是网络io的非阻塞,实现方式是多路复用器,当多路复用器返回有数据的io时,如果同步的话就要循环这些io一个一个处理,但是万一有一个io响应很慢后面的都要等待,nginx会把io放到一个队列,异步去处理。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3