EventLoop事件循环
参考链接
Tasks, microtasks, queues and schedules
执行顺序
- 进入任务执行栈
- 同步任务进入主线程执行, 异步任务进入事件队列
- 同步任务执行完成后调取任务队列中的任务进入主线程执行
-
执行完成再次调取任务队列, 直到没有任务, 退出
- Pending i/o callbacks
执行io, 文件操作,网络操作等 - Idle, prepare
内部操作 - Poll
轮循I/O操作,看是否有I/O的callback,如果没有这会阻塞线程(有超时和基本检测)一段时间
*check
只处理setImmediate的回调函数
*closeCallback
专门处理一些close类型的回调,如关闭网络链接等
注意
- 异步任务要等主线程中的同步任务执行完之后才会执行, 如果主线程有耗时比较久的任务, 异步任务执行定时器什么的会有偏差
- 任务分为 宏任务和微任务
宏任务微任务
- 宏任务
- 主体script, setTimeout, setInterval
- 微任务
- Promise.then, process.nextTick
Promise()属于宏任务, then()及catch 属于微任务