初探-响应式编程

初探-响应式编程
最新回答
如一

2021-10-19 21:32:01

响应式编程(Reactive Programming, RP)是一种使用异步数据流的函数式编程范式。

一、响应式编程的核心概念
  1. 异步(Asynchronous)

    相对于同步(Synchronous),异步并不要求数据在限定条件内给出响应,通常这个限定条件是时间。

    异步处理的好处在于不会受到其他任务或事件是否完成的影响,从而避免了任务阻塞,并能充分利用多线程。

  2. 数据流(Data Stream)

    在响应式编程中,数据流也被称为Observable Sequence或DataSequence。

    数据流有多种形式,如文件流、网页服务请求、系统通知、一系列用户输入等。

    Stream是一个按时间排序的Events序列,它可以放射Value、Error、Completed三种不同的Events。

  3. 函数式编程(Functional Programming)

    函数式编程是一种编程范式,主要思想是把运算过程尽量写成一系列嵌套的函数调用。

    在响应式编程中,通过函数式编程的方式处理异步数据流。

二、响应式编程的模型与机制
  1. 事件驱动的模型

    响应式编程是一种事件驱动的模型,在异步编程模式中,有两种方式获得上一个任务执行结果:主动轮训(异步阻塞)和被动接收反馈(异步非阻塞,也称Publisher/Subscriber模式)。

    在Publisher/Subscriber模式中,不同的事件有相应的Reactor,每个Reactor可以根据要发出或接收的消息,即时地创建一个线程/协程去执行响应的操作。

  2. 监听与订阅

    监听一个Stream也被称为订阅(Subscribe)。

    所定义的事件处理函数就是观察者(Observer),而Stream则是被观察者(Observable)。

三、响应式编程的实际应用
  1. 事务与事务关系

    事务是一个宽泛的概念,可以是一个变量、一个对象、一段代码、一段业务逻辑等。

    事务关系不是类的依赖关系,而是业务之间实际的关系。

    异步和数据流都是为了正确构建事务关系而存在的,异步为了区分出无关的事务,而数据流(事件流)为了联系起有关的事务。

  2. 示例:登陆过程

    在一个APP的登陆过程中,可能需要初始化SDK、初始化数据库、执行登陆操作等多个异步任务。

    通过响应式编程,可以将这些任务封装成Observable,并使用merge等操作符将它们合并成一个新的Observable。

    最后,通过订阅这个新的Observable,来执行登陆成功后的操作,如启动Activity。

四、响应式编程的总结
  • 响应式编程通过函数式编程实现,一个或多个Stream(事件序列)映射成一个新的Stream。
  • 通过定义事件处理函数Observer,异步地捕获相应的事件。
  • 监听感兴趣的Stream,就实现了订阅。
五、图片展示

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