• Nginx Note03——异步非阻塞机制


    曾经有一段时间,在我的理解中,同步就是阻塞,异步就是非阻塞。可不就是这样吗?从代码执行的角度来看,确实如此。但随着了解的深入,概念和场景的拓展,有了不一样的理解。试分析之,难免疏漏,欢迎指正。

                                                                                                                                               ——题记

    一、同步和异步、阻塞和非阻塞

    这四个概念两两组合,会形成4个新的概念。如下所示:

    1.同步阻塞

    客户端发送请求给服务端,此时服务端处理任务时间很久,则客户端则被服务端阻塞了,所以客户端会一直等待服务端的响应,此时客户端不能做其他任何事,服务端也不会接收其他客户端的请求。这种通信机制比较简单粗暴,但是效率不高。

    2.同步非阻塞

    客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候虽然客户端会一直等待响应,但是服务端可以处理其他的请求,过一会来处理原先的。这种方式很高效,一个服务端可以处理很多请求,不会再因为任务没有处理完而堵着,所以这是非阻塞的。

    3.异步阻塞

    客户端发送请求给服务端,此时服务端处理任务时间很久,但是客户端不会等待服务器响应,它可以做其他事,等服务器处理完毕后再把结果响应给客户端,客户端得到回调后再处理服务端的响应。这种方式可以避免客户端一直处于等待的状态,优化了用户体验,其实就是类似于网页里发起的ajax异步请求。

    4.异步非阻塞

    客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候的任务虽然处理时间会很久,但是客户端可以做其他的任务,因为他是异步的,可以在回调函数里处理响应;同时服务端是非阻塞的,所以服务端可以去处理其他的任务,如此,这个模式就显得非常高效了。

    二、一个例子

         以排队吃饭为例:

    1. 同步就是你需要自己每隔一段时间,以轮询的方式去看看是否有空位;
    2. 异步就是有空位了会有人通知你去吃饭;
    3. 阻塞就是在等待的过程中,你不去做其他事情,干等着;
    4. 非阻塞就是你在等待过程中可以去做其他事情,比如玩手机、抽烟和烫头。

    三、小结 

           异步的优显而易见,大大优化用户体验,非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程或线程,大大节约了系统的资源,如此多出来的资源可以给其他中间件去服务了。

  • 相关阅读:
    印度网络安全:威胁与应对
    计算机专业毕业论文安卓毕业设计源码基于Uniapp+SSM实现的Android的健康食谱交流app[包运行成功]
    TypeScript(零) —— 简介、环境搭建、第一个实例
    STM32F4x之中断一
    如何保证Redis的HA高可用
    Java 面试,创建了几个String 对象? 我让问!让你问!让你问!
    MySQL(4)
    win10 VScode配置GCC(MinGW)
    保研计网复习笔记:数据链路层
    [逆向|C语言]C语言逆向if,if else,else if
  • 原文地址:https://blog.csdn.net/Dove_Knowledge/article/details/127801849