反应堆模式在Node.js中如何工作?

时间:2019-06-16 20:23:08

标签: node.js

enter image description here

我正在阅读Node.js设计模式。我一直对反应堆模式有所了解。我在这里看不到任何调用堆栈。我认为调用栈是Node.js设计的主要部分之一。谁能帮我理解这张图吗?也没有回调队列。

2 个答案:

答案 0 :(得分:1)

一切都始于应用程序,应用程序发出请求,事件多路分解器收集这些请求,然后形成队列(事件队列)。事件多路分解器由libuv运行,libuv是一个异步IO库,它允许Node.js执行I / O。

在该图中,您可以看到一个事件队列。实际上,不仅有1个事件队列,还有7个基本队列。这些队列具有升序优先级,最高优先级的队列由事件循环首先检查。

计时器队列具有最高优先级。 setTimeout和setInterval函数在此处排队。一旦事件在此队列中完成或时间到了,事件循环就会将这些函数传递给调用堆栈,在图中被称为执行处理程序。

一旦事件队列之一完成,而不是跳转到下一个队列,事件循环将首先检查其他2个队列,这些队列将其他微任务和process.nextTick函数排入队列。然后它将跳到下一个队列。此图将帮助您可视化事件循环。 enter image description here

如果事件队列中没有事件,或者事件多路分解器没有待处理的请求,则程序将完成。

note:您提到的回调队列是事件队列,调用堆栈是执行处理程序。

答案 1 :(得分:0)

  1. 应用程序通过提交一个新的 I/O 操作来生成一个新的 I/O 操作 请求事件多路复用器。应用程序还指定了一个处理程序,当操作完成时将调用该处理程序。向事件解复用器提交新请求是一个非阻塞调用,它会立即将控制权返回给应用程序。
  2. 当一组 I/O 操作完成时,事件解复用器 将一组相应的事件推送到事件队列中。
  3. 此时,Event Loop 遍历 Event 的项 排队。
  4. 对于每个事件,都会调用关联的处理程序。
  5. 作为应用程序代码一部分的处理程序返回 当其执行完成时控制到事件循环 (5a)。尽管 处理程序执行,它可以请求新的异步操作 (5b),导致将新项目添加到事件解复用器 (1)。
  6. 当处理完事件队列中的所有项目时,事件循环 再次阻塞事件解复用器,然后触发另一个 有新事件可用时循环。

感谢 packtpub.com