一切都始于应用程序,应用程序发起请求,事件多路复用器收集这些请求,然后形成队列,事件队列。事件多路复用器由libuv运行,它是一个异步IO库,允许Node.js执行I/O操作。
在图中,您可以看到一个事件队列。实际上,并不只有1个事件队列,而是有7个基本队列。这些队列具有递增的优先级,事件循环首先检查最高优先级的队列。
计时器队列具有最高优先级。setTimeout和setInterval函数在此处排队。一旦此队列中的事件完成或时间到期,事件循环将这些函数传递给调用堆栈,在该图中被命名为“执行处理程序”。
一旦其中一个事件队列完成,事件循环首先会检查另外两个队列,这些队列包含其他微任务和process.nextTick函数。然后它会跳转到下一个队列。该图将帮助您可视化事件循环。
如果事件队列中没有事件,或者事件多路复用器没有挂起的请求,则程序将完成。
注意:提到的回调队列是事件队列,调用堆栈是执行处理程序。