gpt4 book ai didi

java - Observable vs Flowable rxJava2

转载 作者:IT老高 更新时间:2023-10-28 11:20:46 25 4
gpt4 key购买 nike

我一直在研究新的 rx java 2,但我不太确定我是否理解 backpressure 的概念......

我知道我们有没有 backpressure 支持的 Observable 和支持它的 Flowable

所以基于示例,假设我有 flowableinterval:

        Flowable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
// do smth
}
});

这将在大约 128 个值后崩溃,这很明显我消耗的速度比获取元素的速度要慢。

但是我们对 Observable 也一样

     Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
// do smth
}
});

这根本不会崩溃,即使我延迟使用它仍然有效。为了使 Flowable 工作,假设我放置了 onBackpressureDrop 运算符,崩溃消失了,但也不是所有的值都被发出。

因此,我目前在脑海中找不到答案的基本问题是,当我可以使用普通 Observable 仍然接收所有值而不管理缓冲区?或者也许从另一方面来说,backpressure 有什么优势让我有利于管理和处理消费?

最佳答案

背压在实践中体现的是有界缓冲区,Flowable.observeOn 有一个由 128 个元素组成的缓冲区,这些元素会在下游流所能承受的速度内尽快耗尽。您可以单独增加此缓冲区大小以处理突发源,并且所有背压管理实践仍然适用于 1.x。 Observable.observeOn 有一个无限缓冲区,不断收集元素,您的应用可能会耗尽内存。

你可以使用 Observable 例如:

  • 处理 GUI 事件
  • 使用短序列(总共少于 1000 个元素)

您可以使用 Flowable 例如:

  • 冷源和非定时源
  • 类似来源的生成器
  • 网络和数据库访问器

关于java - Observable vs Flowable rxJava2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40323307/

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