反应式编程(Reactive programming,Rx)
最初来源于函数式语言里面的函数式反应编程(Functional Reactive programming,FRP)。
后来随着微软.Net Framework增加了Reactive Extension而在主流语言中流行起来。
反应式编程是一种编程思想、编程方式,是为了简化并发编程而出现的。
与传统的处理方式相比,它能够基于数据流中的事件进行反应处理。
例如:a+b=c的场景,在传统编程方式下如果a、b发生变化,那么我们需要重新计算a+b来得到c的新值。
而反应式编程中,我们不需要重新计算,a、b的变化事件会触发c的值自动更新。
这种方式类似于我们在消息中间件中常见的发布/订阅模式。由流发布事件,而我们的代码逻辑作为订阅方基于事件进行处理,
并且是异步处理的。
Reactor有Spring背书,同时反应式编程已经集成于Java 9
反应式编程与Java8的Streams比较:
1)反应式编程更加强调异步非阻塞,通过onComplete等注册监听的方式避免阻塞,同时支持delay、interval等特性。
2)而Streams本质上是对集合的并行处理,并不是非阻塞的。
反应式编程的核心是基于事件流、无阻塞、异步的,使用反应式编程不需要编写底层的并发、并行代码。
基本概念
1)Flux,是Reactor中的一种发布者,包含0到N个元素的异步序列。通过其提供的操作可以生成、转换、编排序列。如果不触发异常事件,Flux是无限的。
2)Mono,是Reactor中的一种发布者,包含0或者1个的异步序列。可以用于类似于Runnable的场景。 背压(backpressure),由订阅者声明的、限定本消费者可处理的流中的元素个数。
所有的流都是不可变的,所以对流的操作都会返回一个新的流。
反应式编程的最新动态:
1)Java 9中把反应式流规范以 java.util.concurrent.Flow 类的方式添加到了标准库中;
2)Spring 5对反应式编程模型提供了内置支持,并增加了新的 WebFlux 模块来支持反应式 Web 应用的开发。
3)在前端开发中,Angular 框架也内置使用了 RxJS。
参考资料:
https://cloud.tencent.com/developer/article/1602301?from=15425