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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。