Streams 的基础知识

Reactor 提供了基于 Reactive Streams 标准的 Stream 或者 Promise 来组成静态类型的数据管道。

它是一个非常实用且灵活的组件。它在被用于像 RxJava 的 Observable 那样仅仅只对异步操作进行组合时是足够灵活的。而它也足够强大,可以像一个异步工作队列那样运行,取出或者加入任意的组件,或者来自于其它标准实现之一的 Reactive Streams 组件。[3]

粗略来分有两类基础的流

  • 一个是热 Stream ,它是没有界限的,像一个接收器那样接受输入数据。
    • 可以回想一下诸如鼠标点击的UI事件,或者诸如传感器的实时反馈,交易位置或者推特(Twitter)。
    • 适用于使用 Reactive Streams 协议的适配了的背压策略。
  • 还有一个冷 Stream 则是有界限的,其创建一般是来自于固定的数据集合,像 List 或者或者 Iterable 对象。
    • 可以回想一下诸如 IO 读取,数据库查询这样的 游标型读取操作(Cursored Read)
    • 适用于自动的 Reactive Streams 背压策略。

如我们之前所看到的, Reactor 使用一个 Environment 实体来持有 Dispatcher 实体,用于在一个给定的 JVM(和类装载器)中进行共享使用。一个 Environment 实体可以在一个应用程序中被创建出来并在各处进行传递,以避免类装载各自隔离的问题,或者其静态的辅助方法也可以被使用到。这个站点上的所有示例中,我们都将使用到静态其辅助方法,也鼓励你这样做。 为此,你需要在应用程序的某个地方初始化静态的 Environment

  1. static {
  2. Environment.initialize();
  3. }