一文搞懂node.js中的事件循环
本篇文章给大家介绍一下node.js中的事件循环,看看事件循环模型、事件循环各阶段,并分享两道关于事件循环的面试题,我们一起来看看吧!
事件循环模型
JavaScript引擎本身不实现事件循环机制。浏览器中的事件循环由浏览器实现的,NodeJS中事件循环主要是由底层Libuv库实现的。
Libuv库是事件驱动的,其封装和统一了不同平台的API实现。NodeJS的跨平台和事件循环机制都是通过Libuv库实现的。【推荐学习:《nodejs 教程》】
以上分四个步骤:
1、NodeJS的V8引擎解析JavaScript代码,然后调用Node API
2、NodeAPI将任务分配给Libuv库处理,
3、Libuv中通过事件循环机制管理这些任务的执行,处理结束后将结果返回给V8引擎。
4、V8引擎回调处理Libuv返回
微任务与宏任务
根据任务种类,划分不同的任务队列,微任务队列和宏任务队列。
宏任务:setTimeout、setInterval、setImmediate
微任务:promise.then()、promise.catch()、process.nextTick()
事件循环各阶段
- timers阶段:执行所有setTimeout和setInterval的回调
- pendding callback阶段:某些系统操作的回调。如TCP连接的错误
- poll阶段:轮询等待新的链接和请求等事件,执行I/O回调。比如:文件读取操作
- check阶段:执行setImmedidate的回调
- close callback阶段:关闭回调执行,如socket.on(close...)
每个阶段都会执行当前阶段的任务队列,然后再执行当前阶段的微任务队列,只有执行完所有微任务才进行入下一阶段。
浏览器中事件循环区别:
浏览器中没有分多个阶段;优先级别:同步代码,微任务,宏任务
浏览器中,宏任务可能会有多个队列,但是微任务只有一个,每次都会先执行完微任务再执行宏任务
陈述总结
主要学习了,NodeJS的事件循环的模型,从V8引擎解析JS代码,然后调用NodeAPI,NodeAPI将任务分配给底层Libuv库去执行,主要事件循环机制都是由Libuv库完成的。
整个事件循环划分了6个阶段:timer阶段,pendding callback阶段、poll阶段、check阶段、close callback阶段,执行的顺序是:每个阶段中的任务队列执行完后再执行微任务,只有微任务执行完成后再执行下一个阶段。浏览器的事件循环没有划分阶段,优先级顺序:同步代码、微任务、宏任务。
面试题
题1:你对NodeJS的事件循环的理解?
回答:我对事件循环的理解Node是单线程的,主线程将所有任务都放在循环队列中,然后由底层的libuv库从循环事件队列中取出任务分配给不同的线程去处理,主线程同时也会进行回调处理,整个过程形成事件循环。
与浏览器事件循环不同点:
1、浏览器没有划分多个阶段
2、浏览器任务优先级:同步代码,微任务,宏任务
题2:事件队列中的任务执行顺序?
回答:NodeJS事件循环是划分多个阶段,执行顺序是:一个阶段执行完成后,再执行微任务,然后再进行下一阶段的执行。
更多编程相关知识,请访问:编程入门!!
以上是一文搞懂node.js中的事件循环的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

基于无阻塞、事件驱动建立的Node服务,具有内存消耗低的优点,非常适合处理海量的网络请求。在海量请求的前提下,就需要考虑“内存控制”的相关问题了。 1. V8的垃圾回收机制与内存限制 Js由垃圾回收机

选择一个Node的Docker镜像看起来像是一件小事,但是镜像的大小和潜在漏洞可能会对你的CI/CD流程和安全造成重大的影响。那我们如何选择一个最好Node.js Docker镜像呢?

文件模块是对底层文件操作的封装,例如文件读写/打开关闭/删除添加等等 文件模块最大的特点就是所有的方法都提供的**同步**和**异步**两个版本,具有 sync 后缀的方法都是同步方法,没有的都是异

Node 19已正式发布,下面本篇文章就来带大家详解了解一下Node.js 19的 6 大特性,希望对大家有所帮助!

事件循环是 Node.js 的基本组成部分,通过确保主线程不被阻塞来实现异步编程,了解事件循环对构建高效应用程序至关重要。下面本篇文章就来带大家深入了解Node中的事件循环 ,希望对大家有所帮助!

node无法用npm命令是因为没有正确配置环境变量,其解决办法是:1、打开“系统属性”;2、找到“环境变量”->“系统变量”,然后编辑环境变量;3、找到nodejs所在的文件夹;4、点击“确定”即可。
