代码之家  ›  专栏  ›  技术社区  ›  Almas Abdrazak

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

  •  3
  • Almas Abdrazak  · 技术社区  · 8 年前

    我开始阅读 Vert.x 框架文档,但我不理解它是如何工作的,什么是反应器模式,我读了这篇文章 https://dzone.com/articles/understanding-reactor-pattern-thread-based-and-eve 并注意到 (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 如果两者都使用线程池来管理请求。

    提前感谢

    1 回复  |  直到 5 年前
        1
  •  1
  •   Alexei Kaigorodov    8 年前

    忘了那篇DZone文章吧。忘记反应堆模式。学 Asynchronous procedure call

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

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

    推荐文章