spring5.0学习过程(1)

Reactive 是spring5.0讲的最多的.

Reactive Streams的目的只是建立机制和边界。如果发布者不能减速,则必须决定是缓冲,丢弃还是失败。

我有时也想问,spring mvc和spring webflux关系.为什么有mvc还要spring webflux.官方这张图是很好的解释.

1.1.7。并发模型

Spring MVC和Spring WebFlux都支持带注释的控制器,但并发模型和阻塞和线程的默认假设存在关键差异。

在Spring MVC(以及一般的servlet应用程序)中,假设应用程序可以阻塞当前线程(例如,用于远程调用),并且由于这个原因,servlet容器使用大型线程池来吸收请求期间的潜在阻塞处理。

在Spring WebFlux(以及一般的非阻塞服务器)中,假设应用程序不会阻塞,因此,非阻塞服务器使用小的固定大小的线程池(事件循环工作程序)来处理请求。

“缩放”和“少量线程”可能听起来矛盾,但永远不会阻塞当前线程(并依赖于回调)意味着您不需要额外的线程,因为没有阻塞调用吸收。

 

可变状态

在Reactor和RxJava中,您通过运算符声明逻辑,并且在运行时,形成一个反应流水线,其中数据在不同的阶段按顺序处理。这样做的一个主要好处是它可以使应用程序免于必须保护可变状态,因为该管道中的应用程序代码永远不会同时被调用。

线程模型

您希望在运行Spring WebFlux的服务器上看到哪些线程?

  • 在“vanilla”Spring WebFlux服务器上(例如,没有数据访问或其他可选依赖项),您可以期望服务器有一个线程,而其他几个用于请求处理(通常与CPU核心数一样多)。但是,Servlet容器可以从更多线程开始(例如,在Tomcat上为10),以支持servlet(阻塞)I / O和servlet 3.1(非阻塞)I / O使用。

  • Reactor WebClient以事件循环方式运行。因此,您可以看到与此相关的少量固定数量的处理线程(例如,reactor-http-nio-使用Reactor Netty连接器)。但是,如果Reactor Netty同时用于客户端和服务器,则默认情况下两者共享事件循环资源。

  • Reactor和RxJava提供称为调度程序的线程池抽象,以与publishOn用于将处理切换到不同线程池的运算符一起使用 。调度程序具有建议特定并发策略的名称 - 例如,“并行”(对于具有有限数量线程的CPU绑定工作)或“弹性”(对于具有大量线程的I / O绑定工作)。如果您看到这样的线程,则意味着某些代码正在使用特定的线程池Scheduler策略。

  • 数据访问库和其他第三方依赖项也可以创建和使用自己的线程。

  • 看到官方文档这里,我想我要先学一下Reactor和rxJava了,spring5.0非常强调非阻塞服务器,例如netty.netty的nio讲究的是为请求分配线程按需分配.当有io过来时才分配线程,这也是nio的优势.

配置

Spring Framework不支持启动和停止 服务器。要为服务器配置线程模型,需要使用特定于服务器的配置API,或者,如果使用Spring Boot,请检查每个服务器的Spring Boot配置选项。您可以 配置WebClient直接。对于所有其他库,请参阅其各自的文档。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值