【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
响应式编程最重要的是解决生产者和消费者之间的关系。如果生产者产生的数据过大,而消费者消费不过来,就会压垮消费者。所以就需要有一个重要的概念——流控。
解决流控有几种方式
- 节流 若消费者无法消费生产者生产的元素,则直接丢弃。
- 使用缓冲区 缓冲区的作用相当于在生产者和消费者之间添加了保存并转发的一种机制,把生产者发出的数据暂时存储起来供消费者慢慢消费。
- 调用栈阻塞 就是同步线程。就是消费者没消费完生产者前面的数据,后面的数据则一直阻塞。
- 使用背压 消费者需要多少,生产者生产多少。
背压机制
如果生产者发出的数据比消费者能够处理数据的最大量还要多,消费者可能会被迫一直在获取和处理数据,消耗越来越多的资源,从而埋下潜在的崩溃风险。为了防止这一点,需要有一种机制使消费者可以通知生产者降低数据的生成速度。生产者可以采用多种策略来实现这一要求,这就是背压。
背压机制应该以非阻塞的方式工作。实现非阻塞背压的方法是放弃推策略而采用拉策略。
响应式流
响应式流规范是提供非阻塞背压的异步流处理标准的一种倡议。
响应式流接口
public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); }
发布者(Publisher)是潜在的包含无限数量的有序元素的生产者,它根据收到的请求向当前订阅者发送元素。
public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete(); }
来源:oschina
链接:https://my.oschina.net/u/3768341/blog/3145692