RxJava2中的背压

时间:2017-09-05 11:07:11

标签: rx-java rx-java2

假设我在数据库中有100万行记录。然后我使用Flowable(而不是Observable)来读取记录,然后将它们写入一个写入速度慢的文件(写入比读取慢得多)。

如果我在写作过程中没有使用link 2,那么在写入过程仍然处于中途的情况下,我的内存是否可以填充100万条记录?换句话说,是否有可能出现内存不足的情况?

如果是,使用“反应拉”是防止该异常的唯一方法,如果我也不想使用限制等操作符。

1 个答案:

答案 0 :(得分:2)

这实际上取决于Flowable的创建方式。例如,如果使用Flowable创建fromIterable,而Iterator仅在调用next时从结果集中请求新行,则会为您处理背压。

另一方面,如果使用Flowable创建create,则行为将取决于提供给BackpressureStrategy的{​​{1}}。如果策略为createBUFFER只是继续推送项目,则可能会发生内存不足。理想情况下,应使用自然处理背压的工厂方法创建FlowableEmitter,如果不可能,则使用其他Flowable BackpressureStrategy或自定义DROP运算符。如果其他一切都失败,可以在某些外部库中创建或找到自定义onBackpressureXXX实现。