目前正在用Spring5.0.0.RC2、反应器3.1.0.M2和SpringBoot2.0.0.M2进行反应编程试验。
想知道并发和线程模型,被WebFlux和反应器用来正确编码应用程序和处理可变状态。
反应堆文档指出,这个库被认为是与并发无关的,并提到了Scheduler抽象。WebFlux文档不提供信息。
然而,当通过Spring使用WebFlux时,就定义了一个线程模型。
从我的实验来看我得到的是:
这是对的吗?WebFlux的并发和线程模型是什么:例如,默认线程池是什么?
谢谢你提供这信息
发布于 2018-06-02 10:29:52
在这个问题之后,目前的文档确实提供了一些关于并发模型的线索。和人们可以期待的线程(但我仍然认为,从多线程的角度来更清楚地描述场景下发生的事情,将会受到Spring新手的高度赞赏)。
它讨论了Spring和Spring (每个请求1线程模型与事件循环)之间的区别:
在Spring和servlet应用程序中,一般假定应用程序可以阻塞当前线程,例如用于远程调用,因此servlet容器在处理请求时使用一个大型线程池来吸收潜在的阻塞。 在Spring WebFlux和一般的非阻塞服务器中,假定应用程序不会阻塞,因此非阻塞服务器使用一个小的、固定大小的线程池(事件循环工作人员)来处理请求。调用阻塞API
但是请注意,Spring应用程序也可以引入一些异步性(参见Servlet 3异步)。我建议使用这份报告来讨论WRTServlet3.1NIO和WebFlux。
回到docs:它还建议,在处理反应性流时,您可以进行一些控制:
如果您确实需要使用阻塞库,怎么办? 反应器和RxJava都提供了publishOn操作符,以便在不同的线程上继续处理。
(有关此问题的详细信息,请参阅反应堆调度)
它还讨论了在WebFlux应用程序中可能期望的线程(粗体是我的):
线程模型 您希望在运行的服务器上看到哪些线程?
在某种程度上,您可以通过配置配置来配置线程模型的详细信息。
要为服务器配置线程模型,您需要使用特定于服务器的配置API,或者如果使用Spring,则检查每个服务器的Spring配置选项。可以直接配置WebClient。对于所有其他库,请参考它们各自的文档。
此外,正如Spring 2.0中的默认线程数--反应性webflux配置所强调的那样,
请求处理的默认线程数由底层web服务器决定;默认情况下,SpringBoot2.0使用的是request,它使用Netty的默认值
这是一个默认组件及其默认值(以及总体配置,包括通过注释透明注入的配置)的问题--这也可能在Spring/Boot的不同版本和相应的依赖项之间发生变化。你的猜测似乎是对的。
https://stackoverflow.com/questions/45019486
复制相似问题