Reactor 模式如何与线程一起工作

Reactor pattern how it works with threads

我开始阅读 Vert.x 框架文档,但我不明白它是如何工作的以及什么是 Reactor 模式,我读了这篇文章 https://dzone.com/articles/understanding-reactor-pattern-thread-based-and-eve 并注意到它不是基于一般的 servlet (one request one thread) 方法,Reactor 模式使用 event-driven architecture,其中名为 event loop 的单个线程将请求放入某种作业队列,并提供一个处理程序,该处理程序将在任务完成后执行,并且处理程序中的代码将由此事件循环执行,所以黄金法则是 - 不要阻止事件循环。

我不明白的是,来自文章:

Those handlers/callbacks may utilize a thread pool in multi-core environments.

因此处理程序使用线程池,这个池与标准线程池有何不同,例如 Servlet's container TOMCAT。在 Http server 如果两者都使用线程池来管理请求的情况下,这两个概念有何不同。

提前致谢

忘了那篇 DZone 文章吧。忘记 Reactor 模式吧。学习 Asynchronous procedure call.

有两种方法可以将计算机中的所有工作拆分为多个部分:线程和任务(在 Java 中 - 任务是 Runnables)。任务就绪后在线程池上执行。而且当它们没有准备好时,它们不会占用线程巨大的堆栈,我们可以承受在单个 JVM 实例中有数百万个任务,而在单个 JVM 实例中有 10000 个线程是有问题的。

任务的主要问题是任务需要未准备好的数据(其他任务未计算,或尚未通过网络到达)。在线程世界中,等待数据的线程会执行inputsream.read()这样的阻塞操作,但是任务是不允许这样做的,否则会占用线程池中过多的线程以及基于任务的所有优点编程会丢失。因此,任务增加了一些机制,这些机制在所有参数到达时恰好将该任务提交给线程池。具有这种机制的任务称为异步过程调用。所有的事件驱动架构都是异步过程调用的变体:Vert.x、RxJava、Project Reactor、Akka Actors 等。他们只是假装是原创的东西,并不总是谈论这个。