反应式编程 (Reactive programming)

发布时间 2023-07-26 11:51:46作者: 勇敢-的心

反应式编程(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