美文网首页
JavaScript事件循环机制和NodeJS时间循环机制

JavaScript事件循环机制和NodeJS时间循环机制

作者: Poppy11 | 来源:发表于2022-11-27 21:51 被阅读0次

    JavaScript事件循环机制

    image.png

    一、是什么?

    JavaScript是一门单线程语言,同一时间只能做一件事,但并不意味着单线程就是阻塞,而实现单线程非阻塞的方式就是事件循环。

    JavaScript中,所有的任务都可以分为:

    • 同步任务:立即执行的任务,同步任务一般会直接进入到主线程中执行
    • 异步任务:异步执行的任务,例如ajax请求,或者setTimeout函数
    image.png

    从上面可以看出,同步任务进入主线程,异步任务进入任务队列,主线程内的任务执行完毕为空,会去读取任务队列对应的任务,推入主线程执行。上述过程不断重复就是事件循环机制。

    二、宏任务与微任务

    异步任务又分为宏任务与微任务

    微任务

    • script (可以理解为外层同步代码)
    • setTimeout/setInterval
    • setImmediate、I/O(Node.js)

    微任务

    • Promise.then
    • process.nextTick(NodeJS)
    image.png

    执行宏任务时,遇到微任务就放入微任务任务队列中,当宏任务执行完成后,会查看微任务的事件队列,然后将微任务依次执行完,再进行循环执行下一个宏任务。

    NodeJS事件循环机制

    image.png
    • Timers:用于存储定时器额回调函数(setInterval,setTimeout)
    • Pending callbacks:执行与操作系统相关的回调函数,比如启动服务器端应用时监听端口操作的回调函数就在这里调用。
    • 闲置阶段(idle, prepare):仅系统内部使用
    • 轮询阶段(poll):检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有情况下,除了关闭的回调函数,那些由计时器和 setImmediate() 调度的之外),其余情况 node 将在适当的时候在此阻塞
    • 检查阶段(check):setImmediate() 回调函数在这里执行
    • 关闭事件回调阶段(close callback):一些关闭的回调函数,例如关闭数据库连接的回调

    相关文章

      网友评论

          本文标题:JavaScript事件循环机制和NodeJS时间循环机制

          本文链接:https://www.haomeiwen.com/subject/gumkfdtx.html