首页 > 解决方案 > Reactive 越多越好吗?

问题描述

给定一种方法,我可以通过两种方式编写响应式代码:

public String getString() { return "Hello, World"; }

或者

public Mono<String> getMonoString() { return Mono.just("Hello, World"); }

然后将它与任何一个一起使用

someOtherPublisher.map( value-> getString() + value ).subscribe(System.out::println);

或者

someOtherPublisher.flatMap( value-> getMonoString().map(str-> str + value ) ).subscribe(System.out::println);

我的问题是更多的反应是否更好?我认为额外的开销会getMonoString因为开销和性能而变得更糟,而另一个则认为让方法成为发布者并使用.flatMap更好,因为它“更具反应性”。

我有兴趣找到一些权威来说明为什么一个人比另一个更好或更差,甚至是否重要。

显然我可以做一些简单的测试,但有时简单的测试可能无法令人信服。

标签: reactive-programmingspring-webfluxproject-reactor

解决方案


首先。

public String getString() { return "Hello, World"; }

这不是被动的。这是一个标准的命令式函数,时间复杂度为 0(1)。因此n,运行次数过多,这将执行相同的操作。

这是反应性的:

public Mono<String> getMonoString() { return Mono.just("Hello, World"); }

但这也有 0(1) 的时间复杂度。这意味着,它有可能会在中间切换线程,但可能性很小。运行n次数过多,这也将执行相同的操作。

你的例子都不重要,因为它们实际上都不需要任何时间。

当反应性闪耀时是在处理副作用时。需要时间的事情,例如数据库调用、http 调用、文件 I/O 等。

当线程需要等待时,反应性很好。


推荐阅读