美文网首页
Reactive Introduction

Reactive Introduction

作者: _小马 | 来源:发表于2020-07-02 03:23 被阅读0次

1、什么是Reactive?

Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols.
引用来自:Reactive-Streams Specification

2、Reactive的优缺点

优点:

  • 响应式编程
  • 解决Callback嵌套问题,让异步编程更简单(jdk的CompletableFuture也能简单解决,但是提供的操作符相对少)
  • 流式编程,纵享丝滑
  • 线程切换极致简单

缺点:

  • 线程Stack Trace不友好,线程栈链路更长
  • 有一定的编码难度,需要从同步编程转向异步编程
  • 增加内存开销,每一个操作符都需创建对象

3、实现Reactive-Streams规范的常用框架

4、Reactive API Components

  1. Publisher:数据的发布者
    a. subscribe( Subscriber s):数据订阅方,每个发布者都需要一个订阅者
  2. Subscriber:数据的订阅者,可以理解成类似Sink,有几种事件方法。
    a. onSubscribe( Subscription s ):当发生订阅时,在调用Publisher#subscribe方法后执行
    b. onNext( T t ):当调用Subscription#request(long)后,Publisher成功响应数据会执行onNext
    c. onError( Throwable t ):流执行过程中报错触发
    d. onComplete():流执行完成事件
  3. Subscription:管理控制流
    a. request(long n):请求上游Publisher发布数据数量,Long.MAX_VALUE表示请求unbounded
    b. cancel():取消流。不能在onComplete和onError事件之后取消。
  4. Processor:继承了Publisher和Subscriber,即是发布者也是订阅者。

5、一张简单的图

本质上Subscriber主动request数据,Publisher则push(onNext)给Subscriber


1_9jQeE-r_KSwY_ZiMfWV6wg.png

6、一张复杂的图

pub_sub.png
  1. Subscriber向Publisher订阅( subscribe() ) (下游 → 上游)
  2. Publisher通知Subscriber订阅事件( onSubscribe() ) (上游 → 下游)
  3. Subscriber向Publisher请求数据( request( n ) ) (下游 → 上游)
  4. Publisher向Subscriber发送数据( onNext( t ) )(上游 → 下游)
  5. Publisher向Subscriber发送完成事件 ( onComplete() )(上游 → 下游)

7、更好的方案

  • 协程:用户态轻量级协程。不在这里展开讨论协程。

8、Conclusion

    其实从前面了解到,reactive的优点并不是那么突出,反而会带来开发的难度。但软件开发是一个trade offs 的过程。Java领域中,reactive首先流行在Android中,主要框架是RxJava。在Android中,常常将耗时的操作切换到别的Schedulers,不阻塞Android主线程(Android UI渲染需要在主线程),同时将结果通知到主线程,这样主线程只需要渲染处理后的结果,不会造成Android的卡顿,给用户带来更好的体验。由于RxJava的操作符支持丰富,线程切换非常方便,所以Android成了新宠(当然不仅仅这一个原因)。基于这个例子,可以联想到Netty的EventLoop也是不允许阻塞的,需要fork子线程来处理,所以就有了RxJava + Netty=Zuul 2.0。

9、Reference

  1. Reactive Programming is event-driven as opposed to Reactive Systems that are generally message-driven
  2. Reactive Java: Understanding Reactive streams

相关文章

网友评论

      本文标题:Reactive Introduction

      本文链接:https://www.haomeiwen.com/subject/bkzkqktx.html