我正在研究反应性的含义,并且由于它与普通的非反应性方法相比具有较低的水平差异,所以我想了解发生了什么。让我们以Tomcat作为服务器(我想netty会有所不同)
无反应
活动 ????
如何为Tomcat或Netty完成。我找不到任何有关Tomcat如何支持响应式应用程序以及Netty如何以不同方式做到这一点的文章(连接,线程,请求级别说明)
令我困扰的是,当您仍然需要等待响应时,如何使Web服务器畅通无阻。您可以通过被动方式更快地获得响应的第一部分,但这就是全部吗?我猜想重新激活的重点是有效的线程利用率,这就是我要问的问题。
答案 0 :(得分:2)
您的最后一点是:“我想反应性的要点是有效的线程利用,这就是我要问的。”这正是反应性方法的目的。
那么如何有效利用呢?
举例来说,假设您多次从服务器请求数据。
以典型的非反应方式,您将为每个请求创建/使用多个线程(可能来自线程池)。一个特定线程的工作仅是为了满足该特定请求。线程将接受请求,将其提供给服务器,并等待其响应,直到从服务器中获取数据,然后再将数据带回客户端。
现在,以响应式方式,一旦有请求,将为其分配线程。现在,如果出现另一个请求,将不再创建另一个线程,而是由同一线程处理。怎么样? 线程在向服务器发送请求时,不会等待服务器的任何立即响应,而是会返回并处理其他请求。 现在,当服务器搜索数据并且该数据可用于服务器时,将引发一个事件,然后线程将去获取该数据。这被称为事件循环机制,因为当有数据可用时,调用线程的所有工作都是通过调用事件来完成的。 现在,分配了复杂性以将准确的响应映射到请求。 所有这些复杂性都由Spring-Webflux(在Java中)抽象出来。 因此,整个过程变得无障碍。而且,由于只有一个线程足以满足所有请求,因此不会进行线程切换,因此每个CPU内核可以有一个线程。从而有效地利用了线程。