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 事件循环的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 21:41:37
下一篇 2025年12月19日 21:41:45

相关推荐

  • 探索 Nodejs 性能提升和令人兴奋的新功能

    Web 开发世界在不断发展,而 Node.js 早于这个快速变化的领域。作为当今 Web 应用程序的核心技术之一,Node.js 随着每次新的更新而进步,Node.js 22 尤其引人注目,因为它带来了每个开发人员都渴望发现的许多强大的新功能和增强功能。这些更新为每个企业带来了突破性的功能,旨在实现…

    2025年12月19日
    000
  • 我作为全栈开发人员的旅程

    大家好!我是 Behan,一名全栈开发人员,目前正在学习 Web 开发。我一直专注于 JavaScript、GSAP 和 React 等前端技术,以及 Node.js 和 MongoDB 等后端工具。我的目标是创建既实用又引人入胜的交互式 Web 应用程序。 一路走来,我面临着挑战,例如提高英语水平…

    2025年12月19日
    000
  • 如何在nodejs环境中使用代理

    配置代理有一个既定的标准。它通过以下环境变量运行: https_proxy:https 流量的代理http_proxy:http 流量的代理no_proxy:不应通过代理运行的 url。 nodejs 的本机获取客户端不提供任何开箱即用的功能,但是您可以使用来自 undici http 客户端的代理…

    2025年12月19日
    000
  • 如何制作API接口?

    api是应用程序编程接口,可以理解为与不同软件系统进行通信的通道。它本质上是一个预定义的函数。 api有多种形式,最流行的一种是使用http协议提供服务(如:restful),只要符合规定就可以正常使用。现在很多企业都使用第三方提供的api,也为第三方提供api,所以api的设计也需要谨慎。 如何设…

    2025年12月19日
    000
  • 在 Nodejs 中进行身份验证的正确方法 [uide]

    身份验证是后端开发中最关键但经常被误解的方面之一。由于其复杂性,开发人员经常转向第三方解决方案,例如 auth0 或 supabase。虽然这些都是优秀的工具,但构建您自己的身份验证系统可以提供更大的灵活性和控制力。 在本指南中,您将了解如何以最少的依赖关系为 express.js api 服务实现…

    2025年12月19日
    000
  • Performance Optimization with Middleware in Nodejs

    中间件通过在请求-响应周期的各个阶段拦截和处理请求,在 node.js 应用程序中发挥着至关重要的作用。虽然中间件提供了灵活性和模块化,但如果不能有效实施,它也可能成为瓶颈。在这篇文章中,我们将探讨优化中间件的策略,以确保您的应用程序发挥最佳性能。 为什么要优化中间件? 中间件在应用程序的核心运行,…

    2025年12月19日
    000
  • NodeJS模块【简单说明】

    什么是模块? 假设您的 nodejs 项目中有一个 index.js 文件,您在其中使用了五个函数。但是,其中两个函数也可能在其他文件中使用。因此,您在项目中创建了三个文件,而不是一个文件: index.jsdependency1.jsdependency2.js 这里,每个javascript文件…

    2025年12月19日
    000
  • Nodejs 中的 Stripe 订阅集成 [终极指南]

    让 stripe 订阅与后端服务配合使用可能会很棘手,并且常常会导致开发人员所谓的可怕的“大脑分裂”——同步管理 stripe 的逻辑和您自己的后端数据。 在 vratix,我们在构建开源 stripe 订阅 api 模块时正面解决了这个问题。以下是我们如何在 node.js 中处理 stripe …

    2025年12月19日
    000
  • TypeScript项目中如何兼容NodeJS fs模块和ESM导出?

    TypeScript 项目中使用 NodeJS fs 模块与 ESM 导出 在 TypeScript 项目中,可以同时使用 import 和 require 来引入三方库。这两种方式分别用于 ESM(ECMAScript 模块)和 CJS(CommonJS 模块)模块化引入。import 用于 ES…

    2025年12月19日
    000
  • TypeScript项目中使用NodeJS fs模块会如何影响ESM打包?

    在 TypeScript 项目中使用 NodeJS fs 模块对打包成 ESM 模块的影响 在 TypeScript 项目中,确实可以同时使用 import 和 require 语句来引入第三方库。前者用于导入 ESM 模块,而后者用于导入 CJS 模块。两者之间的区别在于,ESM 模块采用 ES6…

    2025年12月19日
    000
  • Node.js项目中TypeScript文件执行失败:ts-node无法识别.ts文件的原因是什么?

    为什么在 nodejs 项目中不能在 typescript 项目 ts-node 执行.ts 文件? 在 typescript 项目中使用 ts-node 执行 .ts 文件时遇到无法识别.ts 文件后缀的错误,该问题可能是由于以下原因造成的: 1. package.json 中 “ty…

    2025年12月19日
    000
  • Nodejs 集群与 Worker 的使用

    集群 集群模块允许node.js生成多个进程,这些进程可以共享相同的服务器端口并处理每个进程运行的传入请求。 集群的关键特征 经理角色工作进程负载均衡容错 集群的优势 服务的高可用性几乎没有停机时间基于需求的基本可扩展性 工人工作线程作为一个单独的 CPU 核心,使其更加高效,另一方面,工作线程允许…

    2025年12月19日
    000
  • NodeJS中require引入Chai库失败的原因是什么?

    nodejs 中为何难以通过 require 引入 chai 库? 在实际项目中,引用 chai 断言库时,可能会遇到通过 require 语句引入失败的问题,并出现 “require() of es module not supported” 的错误提示。这是因为 chai…

    2025年12月19日
    000
  • Conclusion of My Nodejs Journey and a Sneak Peek into My Upcoming AWS Series

    当我结束这个有关 Node.js 的综合系列时,我对整个旅程中的学习经历和成长充满感激。 在过去的几个月里,我探索了 Node.js 的各个方面,深入研究了基本概念和高级技术。 这是我们一起讨论的主题的回顾,我希望这对初学者和那些希望提高后端开发技能的人都有好处。 Node.js 文章系列回顾 No…

    好文分享 2025年12月19日
    000
  • Nodejs + 自定义 CORS

    cors(跨源资源共享) 是一种允许一个域上的 web 应用程序访问另一个域上的资源的机制。当开发前端和后端分离并通过 api 进行通信的应用程序时,这一点至关重要。 这里有一篇文章解释了在 node.js 和 express 中不使用外部库的 cors 实现: “use strict”;/*jsh…

    2025年12月19日
    000
  • 如何解决 Tree 组件快速点击导致接口多次请求的问题?

    tree组件多次请求接口问题 在使用tree组件时,如 子组件中获取选中的id并发送请求。 @check-change=”handleclick”const handleclick = async (node: any, ischeck: any) => { if (ischeck) { ch…

    2025年12月19日
    000
  • 为什么Promise.allSettled() 无法捕获 buildExtension() 或 buildUI() 中的异常?

    promise.allsettled() 异常处理失效 当nodejs代码中的buildextension()或buildui()方法执行期间发生异常时,使用try-catch 无法捕获异常,导致catch中代码未执行。 为了解决这个问题,需要将promise.allsettled()替换为prom…

    2025年12月19日
    000
  • 完整指南:使用 Nodejs 进行消息传递

    node.js 中的消息传递是创建可扩展、弹性和异步系统的基本实践,尤其是在基于微服务的架构中。本指南涵盖了 rabbitmq 和 kafka 等流行库的实际实施的基本概念。 1.什么是消息传递以及为什么使用它? 消息传递是在服务或软件组件之间发送、接收和管理消息的过程。它适用于: 解耦:允许服务独…

    2025年12月19日
    000
  • node.js 如何运行js

    在 Node.js 中运行 JavaScript 代码需要以下步骤:安装 Node.js。使用文本编辑器或 IDE 编写 JavaScript 代码并保存为 .js 文件。在命令提示符或终端中使用以下命令执行 JavaScript 代码:node filename.js。 在 Node.js 中执行…

    2025年12月19日
    000
  • node.js 如何

    安装 Node.js 有两种主要方法:使用安装器,前往 Node.js 官方网站并选择与操作系统和架构相匹配的安装器。使用包管理器:Windows:choco install nodejsmacOS:brew install nodeLinux:sudo apt install nodejs Nod…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信