2021-10-19 21:32:01
响应式编程(Reactive Programming, RP)是一种使用异步数据流的函数式编程范式。
一、响应式编程的核心概念异步(Asynchronous)
相对于同步(Synchronous),异步并不要求数据在限定条件内给出响应,通常这个限定条件是时间。
异步处理的好处在于不会受到其他任务或事件是否完成的影响,从而避免了任务阻塞,并能充分利用多线程。
数据流(Data Stream)
在响应式编程中,数据流也被称为Observable Sequence或DataSequence。
数据流有多种形式,如文件流、网页服务请求、系统通知、一系列用户输入等。
Stream是一个按时间排序的Events序列,它可以放射Value、Error、Completed三种不同的Events。
函数式编程(Functional Programming)
函数式编程是一种编程范式,主要思想是把运算过程尽量写成一系列嵌套的函数调用。
在响应式编程中,通过函数式编程的方式处理异步数据流。
事件驱动的模型
响应式编程是一种事件驱动的模型,在异步编程模式中,有两种方式获得上一个任务执行结果:主动轮训(异步阻塞)和被动接收反馈(异步非阻塞,也称Publisher/Subscriber模式)。
在Publisher/Subscriber模式中,不同的事件有相应的Reactor,每个Reactor可以根据要发出或接收的消息,即时地创建一个线程/协程去执行响应的操作。
监听与订阅
监听一个Stream也被称为订阅(Subscribe)。
所定义的事件处理函数就是观察者(Observer),而Stream则是被观察者(Observable)。
事务与事务关系
事务是一个宽泛的概念,可以是一个变量、一个对象、一段代码、一段业务逻辑等。
事务关系不是类的依赖关系,而是业务之间实际的关系。
异步和数据流都是为了正确构建事务关系而存在的,异步为了区分出无关的事务,而数据流(事件流)为了联系起有关的事务。
示例:登陆过程
在一个APP的登陆过程中,可能需要初始化SDK、初始化数据库、执行登陆操作等多个异步任务。
通过响应式编程,可以将这些任务封装成Observable,并使用merge等操作符将它们合并成一个新的Observable。
最后,通过订阅这个新的Observable,来执行登陆成功后的操作,如启动Activity。



响应式编程提供了一种处理异步数据流的有效方式,通过函数式编程的范式,能够构建出复杂而高效的事件驱动系统。