经典,反应式方法中的连接,请求和线程

时间:2018-11-16 09:19:13

标签: multithreading tomcat netty spring-webflux reactive

我正在研究反应性的含义,并且由于它与普通的非反应性方法相比具有较低的水平差异,所以我想了解发生了什么。让我们以Tomcat作为服务器(我想netty会有所不同)

无反应

  1. 已创建来自浏览器的连接。
  2. 对于线程池中的每个请求线程,将对其进行处理。
  3. 线程完成处理后,它通过连接将结果返回到另一端。

活动 ????

如何为Tomcat或Netty完成。我找不到任何有关Tomcat如何支持响应式应用程序以及Netty如何以不同方式做到这一点的文章(连接,线程,请求级别说明)

令我困扰的是,当您仍然需要等待响应时,如何使Web服务器畅通无阻。您可以通过被动方式更快地获得响应的第一部分,但这就是全部吗?我猜想重新激活的重点是有效的线程利用率,这就是我要问的问题。

1 个答案:

答案 0 :(得分:2)

您的最后一点是:“我想反应性的要点是有效的线程利用,这就是我要问的。”这正是反应性方法的目的。

那么如何有效利用呢?

举例来说,假设您多次从服务器请求数据。

以典型的非反应方式,您将为每个请求创建/使用多个线程(可能来自线程池)。一个特定线程的工作仅是为了满足该特定请求。线程将接受请求,将其提供给服务器,并等待其响应,直到从服务器中获取数据,然后再将数据带回客户端。

现在,以响应式方式,一旦有请求,将为其分配线程。现在,如果出现另一个请求,将不再创建另一个线程,而是由同一线程处理。怎么样? 线程在向服务器发送请求时,不会等待服务器的任何立即响应,而是会返回并处理其他请求。 现在,当服务器搜索数据并且该数据可用于服务器时,将引发一个事件,然后线程将去获取该数据。这被称为事件循环机制,因为当有数据可用时,调用线程的所有工作都是通过调用事件来完成的。 现在,分配了复杂性以将准确的响应映射到请求。 所有这些复杂性都由Spring-Webflux(在Java中)抽象出来。 因此,整个过程变得无障碍。而且,由于只有一个线程足以满足所有请求,因此不会进行线程切换,因此每个CPU内核可以有一个线程。从而有效地利用了线程。

网上很少有图像可以帮助您了解:-> enter image description here

enter image description here

enter image description here

enter image description here