反应式编程 (Reactive programming)

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

Java的Reactor库提供了一些新的类型,它们基于反应式编程模型。Flux和Mono是其中最常见的类型。

 

Flux和Mono是Reactor中的异步序列流类型。

1)Flux代表一个包含0到N个元素的异步序列;

在该序列中可以包含三种不同类型的事件:正常事件错误事件和完成事件。当事件序列完成时,会自动将流关闭,不允许添加新的元素。

2)Mono代表一个包含0或1个元素的异步序列

在该类型中同样可以包含三种不同类型的事件:正常事件错误事件完成事件。当元素被订阅时,会自动向流中发布0或1个元素

 

参考资料:

https://cloud.tencent.com/developer/article/1602301?from=15425

https://cloud.tencent.com/developer/article/1073888?from=15425

https://www.yzktw.com.cn/post/1286903.html

posted @ 2023-07-26 11:44  勇敢-的心  阅读(178)  评论(0)    收藏  举报