gpt4 book ai didi

rx-java - Observable 相对于 Flowable 的实际优势是什么?

转载 作者:行者123 更新时间:2023-12-04 11:01:10 25 4
gpt4 key购买 nike

What's different in 2.0描述 Observable 之间的差异和 Flowable .然而,Observable主要是根据与 Flowable 相比缺少的功能来描述的。 . Observable只有一个显着特征提及:

Using Observable has lower overhead in general than Flowable.



但即使这似乎与 Observable 的建议相矛盾。对于少量元素更可取,并且更有可能导致 OutOfMemoryError如果任务太重。这似乎表明 Flowable通常效率更高。

我感到困惑的另一件事是如果 Observable元素少于 1K 的用例是首选,并且 Flowable对于具有超过 10K 个元素的用例是首选,那么具有 1K 到 10K 个元素的用例是一个灰色区域。

Observable 之间的差异是否有更技术性的解释?和 Flowable ? 特别是建议一种实用的启发式方法,用于决定在 1K 和 10K 元素之间的灰色区域中使用哪个,或者当元素数量未知或可能发生变化时。

相关: This Q&A只引用文档而不作进一步解释。

最佳答案

Is there a more technical explanation of the differences between Observable and Flowable?



我会给你一个,但大多数人都会被技术细节吓到。

However, Observable is mostly described in terms of features that it lacks in comparison to Flowable.



是的,因为技术上 ObservableFlowable减去其所有操作符上与背压相关的请求协调逻辑。

But even this seems to be contradicted by the suggestion ...



没有矛盾,通过 Observable 获取值从一端到另一端遇到较少的“阻力”,因为逻辑不必处理请求协调或临时缓冲。例如, Observable.flatMapIterable不必排队源项,因为每个内部 Iterable可以从 onNext 立即完整地流式传输. Flowable与直接排放相比,必须对项目进行排队,蹦床排放和可迭代项目排放,并将其限制在相当昂贵的队列排放逻辑中请求的数量。

This seems to suggest that Flowable is generally more efficient.



内存使用(因此 GC 开销)和延迟之间存在权衡。

Then use cases having between 1K and 10K elements are a gray area.



这意味着在这两个数字之间,您可能需要找到其他决策变量,例如单个元素大小、预期延迟、应用程序/系统的其余部分在做什么等。

or when the number of elements is unknown or may change


Observable的案例使用“最长”一词,这意味着在任何给定时间,您可能有 1000 个或更少元素的缓冲序列,或者,您的源平均每毫秒最多发出 1 个元素。

这是一个典型的“依赖”案例:
  • 源可以合理地背压吗?
  • 处理逻辑是否通常比源或其上级慢?
  • 不同的订阅者会遇到不同数量的元素吗?
  • 环境是否受到某种限制?
  • 元素是否比较大?

  • 如果您对这些问题的回答都是肯定的,那么您最好使用 Flowable .

    关于rx-java - Observable 相对于 Flowable 的实际优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647284/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com