node 事件循环,nodejs中的事件循环的执行顺序

  node 事件循环,nodejs中的事件循环的执行顺序

  本文介绍了node.js中的事件循环,查看了事件循环模型及其阶段,并分享了两个关于事件循环的面试问题。让我们来看看!

  node.js速度课程简介:进入学习

  

事件循环模型

   JavaScript引擎本身不实现事件循环机制。浏览器中的事件循环由浏览器实现,NodeJS中的事件循环主要由底层的Libuv库实现。

  Libuv库是事件驱动的,封装并统一了不同平台的API实现。NodeJS的跨平台和事件循环机制都是通过Libuv库实现的。[推荐研究:《nodejs 教程》]

  它分为四个步骤:

  1.NodeJS的V8引擎解析JavaScript代码,然后调用节点API。

  2.NodeAPI将任务分配给Libuv库进行处理,

  3.Libuv通过事件循环机制管理这些任务的执行,处理后将结果返回给V8引擎。

  4.V8引擎回调以处理Libuv返回

  

微任务与宏任务

  根据任务类型划分不同的任务队列,微任务队列,宏任务队列。

  宏:setTimeout、setInterval、setImmediate

  微任务:promise.then()、promise.catch()、process.nextTick()

  

事件循环各阶段

   timers阶段:执行所有setTimeout和setInterval的回调。挂起回调阶段:一些系统操作的回调。比如TCP连接的错误轮询阶段:轮询新的链接和请求等事件,执行I/O回调。比如:文件读取操作的检查阶段:执行setImmedidate的关闭回调阶段:关闭回调执行,比如socket.on(close.)每个阶段都会执行当前阶段的任务队列,然后再执行当前阶段的微任务队列,只有执行完所有微任务才进行入下一阶段。.

  

陈述总结

  主要学习了NodeJS的事件循环模型。我从V8引擎解析JS代码,然后调用NodeAPI。NodeAPI将任务分配给底层Libuv库执行,主事件循环机制由Libuv库完成。

  整个事件周期分为六个阶段:定时器阶段、挂起回调阶段、轮询阶段、检查阶段和关闭回调阶段。执行顺序是:每个阶段的任务队列执行完之后,就会执行微任务,微任务执行完之后才会执行下一个阶段。浏览器的事件周期不分阶段,优先级顺序为:同步代码、微任务、宏任务。

  

面试题

  题1:你对NodeJS的事件循环的理解?

  回答:我对事件循环节点的理解是单线程的。主线程将所有任务放入循环队列,然后底层libuv库从循环事件队列中取出任务,分配给不同的线程进行处理。主线程也做回调处理,整个过程形成一个事件循环。

  不同于浏览器事件循环:

  1.浏览器不分为多个阶段。

  2.浏览器任务优先级:同步代码、微任务和宏任务。

  题2:事件队列中的任务执行顺序?

  答:NodeJS事件周期分为几个阶段,执行顺序是:完成一个阶段后,执行微任务,然后执行下一个阶段。

  有关编程的更多信息,请访问:编程入门!以上文章是关于了解node.js中事件循环的细节请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: