reactive-programming - 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
更好,因为它“更具反应性”。
我有兴趣找到一些权威来说明为什么一个人比另一个更好或更差,甚至是否重要。
显然我可以做一些简单的测试,但有时简单的测试可能无法令人信服。
解决方案
首先。
public String getString() { return "Hello, World"; }
这不是被动的。这是一个标准的命令式函数,时间复杂度为 0(1)。因此n
,运行次数过多,这将执行相同的操作。
这是反应性的:
public Mono<String> getMonoString() { return Mono.just("Hello, World"); }
但这也有 0(1) 的时间复杂度。这意味着,它有可能会在中间切换线程,但可能性很小。运行n
次数过多,这也将执行相同的操作。
你的例子都不重要,因为它们实际上都不需要任何时间。
当反应性闪耀时是在处理副作用时。需要时间的事情,例如数据库调用、http 调用、文件 I/O 等。
当线程需要等待时,反应性很好。