宏任务:setTimeout,setInterval,
微任务:promise的回调
js的事件循环机制比较简单
先执行主线程代码,执行完毕后,清空微任务队列,然后取出一个宏任务,然后清空微任务队列,如此循环
Node的事件循环比较复杂
Node的事件循环分为六个阶段
(1)timers计时器 执行setTimeout
、setInterval
的回调函数
(2)I/0 callbacks 执行I/O callback
被延迟到下一阶段执行;
(3)idle, prepare 队列的移动,仅内部使用
(4)poll 轮询阶段 这个阶段是用来执行和 IO 操作有关的回调的,Node会向操作系统询问是否有新的 IO 事件已经触发,然后会执行响应的事件回调。几乎所有除了 定时器事件、 setImmediate()
和 close callbacks
之外操作都会在这个阶段执行。
(5)check 这个阶段会执行 setImmediate()
设置的任务
(6)close 执行close
事件的callback
,例如socket.on("close",func)
如果一个 socket
或 handle(句柄)
突然被关闭了,例如通过 socket.destroy()
关闭了,close
事件将会在这个阶段发出。
参考:https://juejin.im/post/5b5f365e6fb9a04fa8673f97