反应式编程(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
标签:异步,Reactor,编程,programming,Reactive,事件,序列,反应式 From: https://www.cnblogs.com/heyi-77/p/17582087.html