我开始阅读Vert.x框架文档,但我不明白它是如何工作的,也不知道什么是反应堆模式,我阅读了本文中的https://dzone.com/articles/understanding-reactor-pattern-thread-based-and-eve,并注意到,与基于servlet的一般(one request one thread)方法不同,反应堆模式使用event-driven architecture,其中单线程名为event loop将请求放入某种作业队列,并提供了一个处理程序,一旦任务完成,处理程序中的代码将由该事件循环执行,所以金科玉律是--不要阻止事件循环。
我不明白的是,从文章中看:
Those handlers/callbacks may utilize a thread pool in multi-core environments.因此,处理程序使用线程池,该池与标准线程池(例如Servlet's container TOMCAT )有何不同。如果这两个概念都使用线程池来管理请求,那么在Http server情况下,这两个概念是如何不同的。
提前感谢
发布于 2018-04-16 10:37:09
忘了那篇DZone文章吧。忘了反应堆模式吧。学习异步过程调用。
有两种方法可以将计算机中的所有工作分解为各个部分:线程和任务(在Java中是Runnable)。任务准备就绪时在线程池上执行。当它们还没有准备好时,它们就不会占用线程的庞大堆栈,而且我们可以负担得起单个JVM实例中有数百万个任务,而单个JVM实例中有10000个线程是有问题的。
任务的主要问题是当任务需要还没有准备好的数据时(其他任务没有计算,或者还没有通过网络到达)。在线程世界中,等待数据的线程执行像inputsream.read()这样的阻塞操作,但是任务不允许这样做,否则它们会占用线程池中太多的线程,并且基于任务编程的所有优点都会丢失。因此,任务增加了一些机制,这些机制可以在所有参数到达时将该任务提交到线程池。具有这种机制的任务称为异步过程调用。所有事件驱动的体系结构都是异步过程调用的变体: Vert.x、RxJava、Project反应堆、Akka Actors等,它们只是假装是原创的,而不是总是在谈论这个问题。
https://stackoverflow.com/questions/49848900
复制相似问题