Node.js中的反应器模式是如何工作的?

9

enter image description here

我正在阅读《Node.js设计模式》。我在理解反应器模式方面遇到了困难。我没有看到任何调用堆栈。我认为调用堆栈是Node.js设计的主要部分之一。有人能帮助我理解这个图吗?此外,没有回调队列。


是的,我认为这样的图表会让任何人感到困惑......如果你只是看一些示例代码而不是试图解释并没有澄清任何东西的复杂图表,我认为无论“反应器模式”是什么,它对你来说都更清晰。我猜测,基于这个名字,它的意思是“基于事件的编程”,这在Node.js中非常自然。 - Patrick Roberts
2个回答

8

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

在图中,您可以看到一个事件队列。实际上,并不只有1个事件队列,而是有7个基本队列。这些队列具有递增的优先级,事件循环首先检查最高优先级的队列。

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

一旦其中一个事件队列完成,事件循环首先会检查另外两个队列,这些队列包含其他微任务和process.nextTick函数。然后它会跳转到下一个队列。该图将帮助您可视化事件循环。 enter image description here

如果事件队列中没有事件,或者事件多路复用器没有挂起的请求,则程序将完成。

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


一旦此队列中的事件完成,它如何知道事件已完成?循环是从操作系统轮询信息还是操作系统通知它?谁处理事件到操作系统,并在何时决定处理? - sujeet

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接