假设我在数据库中有100万行记录。然后我使用Flowable(而不是Observable)来读取记录,然后将它们写入一个写入速度慢的文件(写入比读取慢得多)。
如果我在写作过程中没有使用link 2,那么在写入过程仍然处于中途的情况下,我的内存是否可以填充100万条记录?换句话说,是否有可能出现内存不足的情况?
如果是,使用“反应拉”是防止该异常的唯一方法,如果我也不想使用限制等操作符。
答案 0 :(得分:2)
这实际上取决于Flowable
的创建方式。例如,如果使用Flowable
创建fromIterable
,而Iterator
仅在调用next
时从结果集中请求新行,则会为您处理背压。
另一方面,如果使用Flowable
创建create
,则行为将取决于提供给BackpressureStrategy
的{{1}}。如果策略为create
且BUFFER
只是继续推送项目,则可能会发生内存不足。理想情况下,应使用自然处理背压的工厂方法创建FlowableEmitter
,如果不可能,则使用其他Flowable
BackpressureStrategy
或自定义DROP
运算符。如果其他一切都失败,可以在某些外部库中创建或找到自定义onBackpressureXXX
实现。