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

时间:2018-04-16 02:35:56

标签: java multithreading reactor

我研究学习Vert.x框架,但我不明白它是如何工作的以及什么是Reactor模式,我读了这篇文章https://dzone.com/articles/understanding-reactor-pattern-thread-based-and-eve并注意到除了标准设计(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的情况下是如何区别的。

提前感谢

1 个答案:

答案 0 :(得分:0)

忘记DZone的文章。忘掉Reactor模式。了解Asynchronous procedure call

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

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