对前端是一样的,但是对后端的性能利用就不一样了,对比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