异步流处理:反应流
反应流为带有非阻塞回压(back pressure)的异步流处理定义了标准。
这类系统最大的问题是资源消耗。
快速的生产者会使较慢的消费者超负荷。
这些组件之间的数据队列规模可能过度增加,从而影响整个系统的行为。
回压机制确保了在生产者和消费者之间进行协调的队列含有限定数目的元素。
反应流定义了描述必要操作和实体所需的接口、方法和协议的最小集合。
它们基于以下三个要素。
-
信息的发布者。
- 一个或多个信息订阅者。
- 发布者和消费者之间的订阅关系。
反应流规范根据以下规则明确了这些类应该如何交互。
-
发布者将添加那些希望得到通知的订阅者。
- 订阅者被发布者添加时会收到通知。
- 订阅者以异步方式请求来自发布者的一个或多个元素,也就是说,订阅者请求元素并继续其执行。
- 发布者有一个要发布的元素时,会将其发送给请求元素的所有订阅者。
如前所述,所有这些通信都是异步的,因此可以充分利用多核处理器的全部性能。
基本内容
小结
-
了解到 Java 9 是如何实现反应流规范的。
- 为带有非阻塞回压的异步流处理定义了标准。该标准基于以下三个要素:
- 信息的发布者【Flow.Publisher 接口】。
- 该信息的一个或多个订阅者【Flow.Subscriber 接口】。
- 发布者和消费者之间的订阅关系【Flow.Subscription 接口】。
- Java 还提供 SubmissionPublisher 类,如果应用程序有默认行为,也可以使用它。
- 尽管反应流规范定义了这些流的预期行为,但是基于 Java 提供的接口,还可以实现不同的行为。