webmvc和webflux的一些区别
组件

执行过程
webmvc

webflux

写法(返回一个视图)
webmvc

webflux(路由式写法),webflux也支持了mvc的注解使得一般项目可以无压力替换为webflux框架

思想
webmvc(命令式编程)
1
| 假如有一个式子a=b+c,这就意味着a的值是由b和c计算出来的。如果b或者c后续有变化,不会影响到a的值
|
webflux(响应式编程)
1 2 3
| 式子a:=b+c,这就意味着a的值是由b和c计算出来的。但如果b或者c的值后续有变化,会影响到a的值
--变化传递
|
例子(3y)
1 2 3 4 5 6 7
| private String createStr() { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { } return "some string"; }
|
webmvc
1 2 3 4 5 6
| private String get1() { log.info("get1 start"); String result = createStr(); log.info("get1 end."); return result; }
|
webflux
1 2 3 4 5 6
| private Mono<String> get2() { log.info("get2 start"); Mono<String> result = Mono.fromSupplier(() -> createStr()); log.info("get2 end."); return result; }
|

从调用者(浏览器)的角度而言,是感知不到有什么变化的,因为都是得等待5s才返回数据。但是,从服务端的日志我们可以看出,WebFlux是直接返回Mono对象的(而不是像SpringMVC一直同步阻塞5s,线程才返回)。
这正是WebFlux的好处:能够以固定的线程来处理高并发(充分发挥机器的性能)。