• 深入浅出node.js异步编程 及async await原理


    最近看了一些文章对于async await的原理及概念的解析,我觉得很多时候有些不太准确。

    尤其是对于async和await会阻塞线程的说法更是有些扯淡了,JS本身就是单线程的语言如果await会阻塞线程那不是说JS自己搬石头砸自己的脚?

    用最简单的话去描述

    在node中执行一个文件,或处理一个HTTP请求,这个时候js会将同步任务与异步任务区分,如果是同步任务将会被推入执行栈交由主线程执行。

    如果是异步任务将被扔到事件表当中,当异步任务执行完毕将会被推入事件队列当中,等主线程将同步任务执行完毕后。

    将会执行事件队列中的异步任务,其中又分为宏任务与微任务。

    当事件队列中没有执行完毕的异步任务,主线程将会处理下一个http请求,再次进入这样的循环,处理同步任务,查看事件队列中是否有执行完毕的异步任务。

    如果在执行时遇到async await

    那么会将awiat后的代码丢入事件表,并对当前函数进行压栈

    也就是跳过当前函数执行下面主线程中的代码 当主线程同步任务执行完毕后,会按照node原本的机制执行事件队列中的异步任务

    这个时候如果awiat后的表达式或异步任务已经执行完毕,那么会将其所在的函数进行出栈,执行。

    那么问题来了,这其中有所谓的阻塞I/O吗?没有,那么为什么要说这些误导大家呢?要知道node是非阻塞I/O模型,如果I/O阻塞那node还要不要玩了?

    下面这张图是event loop循环的过程。

  • 相关阅读:
    LabVIEW(数据库连接)
    单片机之静态局部变量static
    LabVIEW(数据库自动编号)
    为什么大电容滤低频,小电容滤高频 ?(转载)
    电容、频率的一点小关系(项目有关)
    深入理解计算机系统 第三部分程序间的交互和通信
    深入理解计算机系统chapter9
    深入理解计算机系统chapter8
    深入理解计算机系统chapter7
    深入理解计算机系统chapter6
  • 原文地址:https://www.cnblogs.com/tengx/p/12862611.html
Copyright © 2020-2023  润新知