Node.js 事件循环工作流程 & 生命周期 -- Void Canvas
Node.js 事件循环工作流程 & 生命周期 -- Void Canvas_慕课手记
计时器阶段(Timer phase)的工作流程
检查在计时器队列中是否有需要执行的
悬而未决(Pengding phase)的 i/o 阶段工作流程
然后检查一下 pengding_queue
中是否有来自于之前的悬而未决的任务的回调。如果有,一个接一个的执行,直到队列为空,或者达到系统的最大限制。
Idle, Prepare 阶段
尽管名字是空闲(idle),但是每个 tick 都运行。Prepare 也在轮询阶段开始之前运行。不管怎样,这两个阶段是 node 主要做一些内部操作的阶段;
轮询阶段(Poll phase)工作流程
这是一个观察的阶段。观察是否有新的请求或者连接传入。当事件循环进入轮询阶段,它会在 watcher_queue
中执行脚本,包含文件读响应,新的 socket 或者 http 连接请求,直到时间耗尽或者像其他阶段那样达到系统依赖上限。
事件循环明明是从poll阶段进入的
检查阶段(Check phase)工作流程
这个阶段的队列中有被 api setImmediate
触发的回调。它将会像其他阶段那样一个接着一个的执行,直到队列为空或者达到依赖系统的最大限制。
关闭回调(Close callback)的工作流程
事件循环的下一个目的地是处理关闭或者销毁类型的回调 close callback
。事件循环执行完这个阶段的队列中的回调后,它会检查循环(loop)是否还活着,如果没有,退出。但是如果还有工作要做,它会进行下一个循环;因此在计时器阶段。如果你认为之前例子中的定时器 (A & B)过期,那么现在在定时器阶段将会从定时器 C 开始检查是否过期。
nextTickQueue & microTaskQueue
它们当然在从当前阶段到下一个阶段之前尽可能快的运行。不像其他阶段,它们两个没有系统依赖的最大限制,node 运行它们直到两个队列是空的。
nextTickQueue 中的任务保留着被 process.nextTick()触发的回调。
microTaskQueue 保留着被 Promise 触发的回调。
nextTickQueue 会比 microTaskQueue 有着更高的任务优先级。
nextTickQueue 会在正在进行中的回调组(timer->close这个循环)执行完之后执行。
Node 与浏览器的 Event Loop 差异
浏览器与Node的事件循环(Event Loop)有何区别?_Fundebug的博客-CSDN博客_node事件循环和浏览器事件循环区别(事件循环机制也讲得很好)
浏览器环境下,microtask 的任务队列是每个 macrotask 执行完之后执行。而在 Node.js 中,microtask 会在事件循环的各个阶段之间执行,也就是一个阶段执行完毕,就会去执行 microtask 队列的任务。
telnet的使用
Telnet模拟HTTP GET和POST方法_更程序中的博客-CSDN博客_telnet 模拟get
connect中间件
Nodejs基础中间件Connect - {前端开发} - 博客园
socket.io
socket.io 中文手册 socket.io 中文文档 - liuxixi - 博客园
express
express.static 作用及用法
express.static的路径如果是相对的,会在服务启动的环境里找
express.static 作用及用法_黎先生你好的博客-CSDN博客_express.static
用数组形成管理回调函数,然后创建了一个index指针,next通过闭包的形式传出,自增index指针并执行函数
常见问题
关于node.js中response的end事件是否一定要先监听了data事件才能被emit
关于node.js中response的end事件是否一定要先监听了data事件才能被emit - SegmentFault 思否
给console.log添加颜色
Nodejs中,path.join()和path.resolve()区别
Nodejs中,path.join()和path.resolve()区别_huang_sir_91的博客-CSDN博客_nodejs path.join
node的event对象的emitter的on和off
回调函数要相同内存地址才可以卸载监听
node调试ts文件
ts-node存在各种node版本不兼容,及一堆配置,很繁琐
NVM
1. NVM安装后无法使用node命令
- 检查是否启用node:nvm on命令启用
- 检查环境变量是否设置