当前位置: 首页 > news >正文

Subject vs Flowable vs Observable 对比

Subject vs Flowable vs Observable 对比

基本概念

Observable

  • 热/冷特性:默认是冷的(每个订阅者都会触发独立的数据流)
  • 背压处理:不支持背压(无法处理生产者速度大于消费者速度的情况)
  • 适用场景:数据量不大,不需要背压控制的场景

Flowable

  • 热/冷特性:默认是冷的
  • 背压处理:支持背压(可以处理生产者速度大于消费者速度的情况)
  • 适用场景:大数据量或不确定数据量的场景,需要背压控制

Subject

  • 热/冷特性:热的(数据发射与订阅无关)
  • 背压处理:取决于具体实现(如 PublishSubject 不支持背压,FlowableProcessor 支持)
  • 适用场景:需要将非响应式代码桥接到响应式世界,或多播场景

详细对比

特性ObservableFlowableSubject
背压支持不支持支持取决于实现
内存效率低(无背压控制)中等
初始开销较高(背压机制)
热/冷默认冷默认冷
多播能力需要 multicast()需要 multicast()内置多播
典型用例UI事件、小数据集网络请求、大数据集事件总线、桥接代码

使用建议

  1. 使用 Observable 当

    • 处理少量数据(<1000个元素)
    • 处理同步操作
    • 处理GUI事件(如点击)
  2. 使用 Flowable 当

    • 处理大量或可能无限的数据
    • 进行IO操作(如网络请求)
    • 需要背压控制
  3. 使用 Subject 当

    • 需要将传统回调转换为响应式流
    • 需要多播事件
    • 创建事件总线或类似模式

代码示例

// Observable 示例
Observable<Integer> observable = Observable.create(emitter -> {emitter.onNext(1);emitter.onNext(2);emitter.onComplete();
});// Flowable 示例(支持背压)
Flowable<Integer> flowable = Flowable.create(emitter -> {for (int i = 0; i < 10000; i++) {emitter.onNext(i);}emitter.onComplete();
}, BackpressureStrategy.BUFFER);// Subject 示例(多播)
Subject<Integer> subject = PublishSubject.create();
subject.subscribe(System.out::println);
subject.subscribe(System.out::println);
subject.onNext(1);
subject.onNext(2);

性能考虑

  • Observable:轻量级,适合小规模数据,无背压开销
  • Flowable:有背压管理开销,但能防止内存溢出
  • Subject:性能取决于具体实现,通常用于桥接而非大数据处理

选择正确的类型取决于具体用例、数据量和背压需求。

http://www.dtcms.com/a/270269.html

相关文章:

  • 【零基础学AI】第31讲:目标检测 - YOLO算法
  • 每日算法刷题Day44 7.8:leetcode前缀和4道题,用时1h40min
  • JVM 为什么使用元空间(Metaspace)替换了永久代(PermGen)?——深入理解 Java 方法区与类元数据存储的演进
  • 视频能转成gif动图吗?怎么弄?
  • [NOIP][C++]洛谷P1376 [USACO05MAR] Yogurt factory 机器工厂
  • 没合适的组合wheel包,就自行编译flash_attn吧
  • 行业实践案例:金融行业数据治理体系全景解析
  • Java 关键字详解:掌握所有保留关键字的用途与最佳实践
  • Apache Atlas编译打包,可运行包下载地址
  • DMA技术与音频数据的存储和播放
  • C++STL-vector
  • 【c++学习记录】状态模式,实现一个登陆功能
  • 笔试——Day1
  • numpy数据分析知识总结
  • VMware Workstation不可恢复错误:(vmx)点击设置闪退解决
  • [2-02-02].第03节:环境搭建 - Win10搭建ES集群环境
  • 一天一道Sql题(day03)
  • Choreographer
  • 基于大模型的心肌炎全病程风险预测与诊疗方案研究
  • 使用git生成ssh的ed25519密钥
  • 鲁成伟业精彩亮相第六届中国国际无人机及无人系统博览会
  • 一个vue项目的基本构成
  • DCL学习
  • 操作系统:基本概念
  • Java结构型模式---适配器模式
  • 蓝桥杯 第十六届(2025)真题思路复盘解析
  • 【Bluedroid】BLE 地址解析列表的初始化与清除机制(btm_ble_resolving_list_init)
  • 分布式接口幂等性的演进和最佳实践,含springBoot 实现(Java版本)
  • uniapp支持单选和多选的 Vue2 版本组件
  • 从UI设计到数字孪生实战演练:构建智慧金融的智能投顾平台