记录一下node的执行过程

151 阅读1分钟

node的执行过程

很重要!!!node只会在一个线程中运行。

graph TD
初始化项目 --> 执行顶层代码 --> 加载依赖的模块 --> 注册回调 --> 执行事件循环 --> 线程池

但是在执行事件循环的过程中,一些繁重的任务(例如处理文件的操作,缓存密码,压缩,DNS查询等等)会阻塞其执行,所以node引入了libuv,它提供了额外的线程(四个或更多)组成线程池,那些繁重的任务可以由事件循环转到线程池执行以此来减轻主线程的压力。

事件循环是node架构的核心!接下来重点记录事件循环的执行过程。

graph TD
过时的定时任务 --> I/O轮询 --> setImmediate --> 结束回调

除了这四个之外其实还包括prosess.nexTick()和微任务的执行(暂不讨论) 那么如何判定事件循环的结束呢?其实很简单,看是否还有其他宏任务,微任务或者I/O,如果有则继续执行事件循坏,没有则此次事件循环就结束了。