springwebflux 页面_如何理解 Spring Webflux 的「非阻塞」?

本文探讨了Spring Webflux如何实现非阻塞特性,通过对比传统的Thread.sleep()方法和Webflux的delay()方法,揭示了延迟操作的异步处理方式。Spring Webflux是响应式编程在后端的实践,相比Spring MVC具有更高的性能。通过ScheduledExecutorService,delay()方法将延时任务放入队列,避免阻塞主线程,从而提升服务性能。
摘要由CSDN通过智能技术生成

对前端是一样的,但是对后端的性能利用就不一样了,对比thread的sleep方法和webflux的delay方法,就可以知道它的非阻塞原理是什么,又是好在哪里。

反应式编程一开始是从前端和客户端开始兴起,现在大有蔓延到后端的趋势,Spring5推出的webflux就是反应式编程的产物。

webflux对比于springMVC,性能高出很多,网上已经有很多的测评,不再在过多说明。

左图同步,右图异步

上图看出对比于同步,异步所用的线程是比较少的,不过有个前提是,程序逻辑中有阻塞(如io阻塞等),且这种阻塞是可以异步化的。

为了满足这个前提,反应式编程框架就必须将这些阻塞变成异步化,如新出的WebClient工具就是将http请求io异步化。

delay方法就是用来代替sleep方法的,下面来讲解一下delay方法是怎么将延时异步化的。

源码解读通过查看Mono delay(Duration duration)方法源码,它会构造一个MonoDelay类,并通过传入全局公用的调度器Schedulers.parallel()来调度里面的异步任务。

public static Mono delay(Duration duration) {

return delay(duration, Schedulers.parallel());

}

public static Mono delay(Duration duration, Scheduler timer) {

return onAssembly(new MonoD

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值