nodejs中的EventLoop

2023-05-16

   ┌───────────────────────┐
┌─>│        timers         │<————— 执行 setTimeout()、setInterval() 的回调
│  └──────────┬────────────┘
|             |<-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
│  ┌──────────┴────────────┐
│  │     pending callbacks │<————— 执行由上一个 Tick 延迟下来的 I/O 回调(待完善,可忽略)
│  └──────────┬────────────┘
|             |<-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
│  ┌──────────┴────────────┐
│  │     idle, prepare     │<————— 内部调用(可忽略)
│  └──────────┬────────────┘     
|             |<-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
|             |                   ┌───────────────┐
│  ┌──────────┴────────────┐      │   incoming:- (执行几乎所有的回调,除了 close callbacks 以及 timers 调度的回调和 setImmediate() 调度的回调,在恰当的时机将会阻塞在此阶段)
│  │         poll          │<─────┤  connections, │ 
│  └──────────┬────────────┘      │   data, etc.  │ 
│             |                   |               | 
|             |                   └───────────────┘
|             |<-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
|  ┌──────────┴────────────┐      
│  │        check          │<————— setImmediate() 的回调将会在这个阶段执行
│  └──────────┬────────────┘
|             |<-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
│  ┌──────────┴────────────┐
└──┤    close callbacks    │<————— socket.on('close', ...)
   └───────────────────────┘

先执行所有类型为 timers 的 MacroTask,然后执行所有的 MicroTask(注意 NextTick 要优先哦);
进入 poll 阶段,执行几乎所有 MacroTask,然后执行所有的 MicroTask;
再执行所有类型为 check 的 MacroTask,然后执行所有的 MicroTask;
再执行所有类型为 close callbacks 的 MacroTask,然后执行所有的 MicroTask;
至此,完成一个 Tick,回到 timers 阶段;
……
如此反复,无穷无尽……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodejs中的EventLoop 的相关文章

  • -bash:react-native:找不到命令

    我已经成功安装了brew node 4 0 watchman和flow 当我安装时我收到了以下信息npm install g react native cli Users home node bin react native gt User
  • 护照认证失败导致重定向循环

    我正在使用带有 Facebook 身份验证的 Node Express 和 Passport 我有以下路线 当 facebook auth callback是回调url function render page req res var us
  • FullCalendar:事件最初未从函数调用(AJAX)渲染

    我已将 FullCalendar 配置为从 AJAX 请求中提取其事件 但首次加载页面时它们不会在日历上呈现 document ready function sh1client new Array sh2client new Array s
  • 我如何用 es6(不带打字稿)开玩笑地模拟 Prisma 客户端?

    Prisma 文档提供了模拟客户端以及使用 jest 和 typescript 进行单元测试的示例 有没有办法在不使用 TypeScript 的情况下开玩笑地嘲笑客户端 如果您能举一个简单的例子 我将不胜感激 需要补充的小事情 我在项目中使
  • 使用 OpenTok 暂停视频通话

    我一直在研究 webRTC 平台 发现 OpenTok 似乎提供了最可定制的功能 在深入研究之前 我想确保它可以满足一项关键要求 在两个用户 A 和 B 之间的 1 1 视频通话期间 我希望其中一个用户 让我们与用户 A 一起 能够接收来自
  • Nodejs post方法中的第二个参数是什么

    在我的代码中我有这样写的代码 router post publicShare function req res next 我登记入住文件 https expressjs com en guide routing html但没有找到为什么第二
  • Firebase Cloud Functions 会在删除节点后立即删除节点,而不是 24 小时后

    我的目标是在使用 Firebase Cloud Functions 和实时数据库发送消息节点 24 小时后删除所有消息节点 我尝试复制并粘贴答案这个帖子 https stackoverflow com questions 32004582
  • 如何优化 Express.js 路线?

    我正在开发一个保留区域 其中包含以下几页 dashboard dashboard profile dashboard user dashboard view 这是一个简单的用户控制面板 目前我有四种路线 app all dashboard
  • Firebase Cloud Functions - 创建 pdf、存储到存储桶并通过邮件发送

    我正在开发一个 Firebase 函数 当新订单添加到实时数据库时会触发该函数 它做的第一件事是创建一个 pdf 并将其通过管道传输到谷歌云存储桶 在存储桶流的 on finish 事件上 下一个函数将启动 该函数应通过电子邮件将管道传输的
  • 新 Stripe Checkout 中的税率

    我已经实施了新的Stripe Checkout on my NodeJS server 但我无法指定Tax Rate用于发票 据我的理解税率应指定在支付意向API https stripe com docs api payment inte
  • 如何将子节点从一个节点复制到另一个节点?

    情况 我需要下载 childNode 然后将其 set 到另一个节点中 问题是我只想在 childNode 的 Score 属性达到 100 时才执行此操作 我应该在何时何地检查帖子的分数是否为 100 或更高 以及如何将它们复制到新索引一
  • 安装nodejs npm 和 grunt 出现错误

    我不熟悉 Python NodeJS NPM 或 Grunt 但我需要安装它 因为我想尝试一下Github项目 https github com raphaelluchini popcorntime smarttv 我从 node org
  • node js 从 URL 获取 Zip 并上传到 Google 云端硬盘

    我正在尝试从网址获取 zip 文件 以便在下一步中将其上传到 Google 云端硬盘 但我的代码不起作用 The method to get the zip File from the url function getFile var fi
  • csv-parse 解析的对象的第一个属性不可访问

    我正在使用以下内容解析 csv 文件csv 解析 https csv js org parse userID sysID 20 50 30 71 但是 在返回的对象上 无法访问从第一列创建的属性userID 这是我的代码 async fun
  • 如何停止在 Node.js 中出现此 ReferenceError?

    183 184 gt gt 185 186 alert Welcome 187 188 just registered is not defined 基本上 我想说 如果 just registered 已定义并且为 true 则发出警报
  • NodeJS + Mysql 与 Docker Compose 2

    我正在尝试构建一个 docker compose 文件来在本地部署连接到 mysql 服务器的 NodeJS 应用程序 我已经尝试了所有方法 在 Stackoverflow 中阅读了大量教程和一些问题 但我不断收到 ECONNREFUSED
  • 无法从 root(或 sudo)使用 NVM

    我注意到我的应用程序在运行时使用不同版本的 NodeJSsudo node v v0 10 23 sudo node v v0 11 8 pre This v0 11 8 pre给我带来了一些问题 所以我绝对不想使用它 但我无法将其更改为r
  • Mongoose findOne 通过 _id 嵌入文档

    我正在尝试将菜单推送到嵌入文档 但我在餐厅里没有定义 findOne 我只是想将一些文档推送到餐厅的菜单类别中 正如您在架构中看到的 var RestaurantSchema new mongoose Schema contactTelph
  • 使用 Jest 模拟基于承诺的请求

    我正在尝试使用 Jest 对函数进行单元测试 但在处理 jest 模拟模块时遇到了一些麻烦 相当于 Nodejs 世界中的 rewire 或 proxyquire 我实际上正在尝试测试是否已使用一些参数在模拟模块上调用了间谍 这是我要测试的
  • 选择 Node.js 上 Bookshelf、MySQL、Knex 在两个日期之间创建的对象

    我需要获取两次之间创建的对象的列表 我能够通过编写 SQL 查询来获取数据 但我需要通过 Bookshelf 编写这个查询 我的简单查询 router route locations fetch all locations get func

随机推荐

  • va_start 与 va_end用法

    1 包含头文件 include lt stdarg h gt 2 使用方法 参考 http www cnblogs com hanyonglu archive 2011 05 07 2039916 html include lt stdio
  • jetson-sd卡制作(批量烧写)

    jetson系列如果使用sd卡开发 xff0c 开发完成后可以不用重新制作根文件系统 拷贝目前的SD卡即可实现批量烧写 一 开发好的SD卡制作img文件 1 将sd卡插到PC端 xff0c 查看sd卡设备 eg dev sdd fdisk
  • 结构体知识点

    结构体的结构如下 xff1a span class token comment 关键字struct是数据类型说明符 xff0c 指出下面说明的是结构体类型 span span class token keyword struct span
  • SurfaceView 的一般绘制View用法(一)

    前段时间写了不少关于自定义View相关的文章 xff0c 最近两个项目同时开工 xff0c 忙成狗了 xff0c 这不是不写博客的理由哈 xff0c 今晚写一篇关于SurfaceView相关的博客 xff0c 还是和以前一样 xff0c 今
  • WorkerMan实现Web通讯(使用Vue实现前端页面逻辑)

    需要使用到的扩展 https github com tangbc vue virtual scroll list 最终效果 对话框 主页面 Main vue lt template gt lt div gt lt chat message
  • [VS][原创]vs2019新建项目提示未正确加载nvdapackage包

    第一步 xff1a 确认cuda 43 cudnn以及驱动程序都安装了 第二步 xff1a 从win11菜单栏搜索打开Developer Command Prompt for VS 2019 xff0c 注意要以管理员身份运行 xff0c
  • 2016年linux c程序员和初学者不得错过的精品图书18册

    1 图书名称 零点起飞学Linux C编程 图书信息 陈冠军 清华大学出版社 2013 09 01 2 图书名称 Linux C从入门到精通 图书信息 明日科 清华大学出版社 2012 12 01 3 图书名称 Linux C编程一站式学习
  • 面试造飞机系列:看架构师如何设计微服务接口

    来源 后端技术学堂 责编 Carol 封图 CSDN下载于视觉中国 在微服务设计中 xff0c 服务间接口通信设计常见的有两种方式 xff1a RPC 和 REST xff0c 关于微服务和 RPC 的更多细节 xff0c 可以参考我上一篇
  • C++ 数组(vector)常用操作总结

    目录 1 vector对象的定义和初始化方式 2 vector 常用基础操作 3 使用迭代器的遍历 插入 删除操作 4 vector 元素的重排操作 xff08 排序 逆序等 xff09 5 vector 中找最值 6 改变vector大小
  • ROS 节点初始化步骤、topic/service创建及使用

    目录 1 节点初始化步骤 2 service 创建及使用 3 topic创建及使用 4 框架总结 这是一个总结复盘的记录 1 节点初始化步骤 在 mian 函数中使用 ros init 初始化节点 xff0c 注册节点名 xff0c 这里注
  • Docker+xrdp+understand

    创建容器 我使用的是Ubuntu18 04的镜像 xff0c 注意把3389端口映射出来 docker run it name understand p 3399 3389 ubuntu 18 04 安装xrdp协议 span class
  • 如何下载Amazon页面产品视频

    step1 右键 查看网页源码 step2 ctrl 43 f查找 MP4 step3 xff1a 复制相关URL
  • 高速信号参考GND平面和VCC平面,会带来不同的回路阻抗,影响信号质量

    1 1参考平面作用 参考平面的作用之一是就是给信号提供回流路径 xff0c 对于信号来说 xff0c 不管任何网络的铜平面都可以作为参考平面 选择GND作为参考平面与其他网络的区别在于 xff0c 使用其他网络提供回流路径时 xff0c 网
  • 如何理解防抖debounce和节流throttle

    本人通过阅读网络上防抖和节流多篇相关的文章 xff0c 并借鉴相关案例进行说明 防抖 防抖就像人眨眼睛一样 xff0c 不可能不停的眨 xff0c 每隔一定时间眨一下 xff0c 防止眼睛干涩 xff0c 如果不停眨眼 xff0c 别人以为
  • 1024快乐!浅谈scrollTop需要踩的坑

    开始之前 xff0c 需要分清楚scrollTo和scrollTop 坑one 1 设置浏览器scrollTop 最好通过用户操作设置滚动 xff0c 或者setTimeout延时滚动 span class token comment Ch
  • 如何写出高效的 Vue 代码

    开讲之前我先简单的自我介绍一下 xff0c 本人自喻 xff1a flitrue xff0c 工作三年有余 xff0c 在一家不知名的互联网企业担任前端架构师之职 技术选型问题 近几年前端发展快速 xff0c 很多同学抱怨学不动了 xff0
  • 深入了解Object.freeze()和Object.seal()

    目录 Object freeze Object seal 对比Object freeze 和Object seal 拓展Object preventExtensions Object freeze 官方MDN对Object freeze 的
  • gulp和webpack的区别

    基本区别 xff1a gulp可以进行js xff0c htm xff0c css xff0c img的压缩打包 xff0c 是自动化构建工具 xff0c 可以将多个js文件或是css压缩成一个文件 xff0c 并且可以压缩为一行 xff0
  • require和import的区别?exports和module.exports的区别?export和export default的区别?

    CommonJs模块是运行时加载 xff0c ES6模块是编译时输出接口 require是commonjs规范中导入模块的语法 xff1b import是ES6规范中导入模块的语法 xff1b require支持动态导入 xff1b imp
  • nodejs中的EventLoop

    span class token operator gt span timers span class token operator lt span 执行 span class token function setTimeout span