首页 > web前端 > js教程 > Node.js 事件循环

Node.js 事件循环

Susan Sarandon
发布: 2024-12-14 01:19:14
原创
292 人浏览过

大家好,
在第一篇文章中,我将写有关事件循环(主循环、主线程、事件线程等...)的内容,这是真正想了解 Javascript 的人思考的主题之一。我还想补充一点,这篇文章将是我自己做的笔记的汇编,而不是专业的。我为我的错误提前道歉。
在下图中,您可以看到 Nodejs 中的 javascript v8 引擎、事件循环机制和 libuv 库。 libuv 库可以执行一些 Javascript 无法提供的任务。如果我们在浏览器中运行 javascript,我们就会使用浏览器提供的 Web api 来运行。

事件循环是一种架构设计模式。这种方式之所以受到青睐,与JavaScript的工作原理有直接关系。 Javascript 运行单线程和非阻塞 I/O。换句话说,虽然它运行在单线程上,但在执行耗时任务时并没有被阻塞,而是继续工作。它通过事件循环架构解决了这个问题。

当程序运行时,全局执行上下文被创建并添加到调用堆栈中。在程序流程完成之前,不会将其从调用堆栈中删除。事实上,为每个函数创建了一个执行上下文。一旦函数完成,它就会从调用堆栈中删除。但它并不总是这样。

在某些情况下,函数需要时间才能完成其功能。例如,网络请求或来自文件的数据读写操作、DOM 事件(并非全部)。在这种情况下,该函数由线程池或Web API 处理。当进程完成时,回调函数被添加到回调队列(任务队列)中。当轮到它的时候(当调用堆栈清空时),它被转移到调用堆栈并被处理。一旦处理完毕,它就会从调用堆栈中删除。微任务队列中的作业先于回调队列中的作业进行处理。例如 Promise、Mutation Observer、queueMicrotask

Node.js 中的线程池和浏览器中的 Web Workers 用于执行需要密集 CPU 能力的异步操作和作业。我不会在这里触及它们在用法和范围上的差异。我想说的是:我们可以使用不同的机制来处理 JavaScript 无法处理的任务。

Node.js Event Loop

以上是Node.js 事件循环的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板