Nodejs 事件循环

大家好,
在第一篇文章中,我将写有关事件循环(主循环、主线程、事件线程等…)的内容,这是真正想了解 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 无法处理的任务。

Nodejs 事件循环

以上就是Nodejs 事件循环的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2645970.html

(0)
上一篇 2025年3月7日 07:40:02
下一篇 2025年2月28日 20:37:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论