FluxJava 最初的设计就是以 Add-on 的方式来提供对于 RxJava 的支持,所以这次增加 RxJava2 的部份也依照相同的模式,在 Project 中加上了 fluxjava-rx2 的 Module。新的 Module 功能上与 fluxjava-rx 大致上相同,只是原本以 RxJava 规格运作的部份,改为使用 RxJava2。

由于 RxJava 与 RxJava2 不太有机会共存在同一个 Module 里,所以 fluxjava-rx2 沿用了 fluxjava-rx 的 Package 名称,在使用上这二个 Add-on 必须要择一引用。不过也带来了一个额外的好处,如果想要由 fluxjava-rx 升级到 fluxjava-rx2 时,只要修改成 RxJava2 的调用规格,不用再特别调整 Import 的内容。

在 fluxjava-rx2 中与 fluxjava-rx 最大的差异,主要是因应 RxJava2 把原本的 Observable 分成了有背压版本的 Flowable 与没有背压版本的 Observable。因此 RxBus 与 RxStore 中都分别再提供了 toFlowable 的 Method 来取得 Flowable,不过 Observable 本来就可以再转换为 Flowable,此处的功能只是为了增加便利性、简化源代码之用。

同时,利用这篇文章补充说明一下一些使用上的技术细节。在 RxStore 中使用的是没有背压版本的 Observable 来接收外部传来的信息,只是接收到之后就会被分派到不同的 Thread 上去处理后续的工作,所以在这个部份是不大有机会遇上 MissingBackpressureException 问题的。但是,这并不代表背压所造成的情况就不存在了,只是瓶颈移到了 ThreadPool 的承受能力或是执行的环境可以产生 Thread 的数量上。

就算是使用有背压功能的 Flowable,也不代表就可以高枕无忧了。说穿了,背压本身不是什么神奇的黑科技,原理上只是在上下游中间加了个水池,让下游有喘息的空间。水池毕竟还是有一定的物理限制,没有控制好,依旧会让水池承载不下而出现错误。

因此,不论使用哪一种方法,前端发送的数量仍然应该要被谨慎地控制,避免海量的信息把接收端给淹没了。像是把 RecyclerView 滚动时产生位移的 Event 毫无选择地往 RxStore 送。

在发送端就要筛选信息,除了要减少 MissingBackpressureException 可能会出现的机会外,还有一个目的是要节省执行成本。当信息数量大到无法处理时,能做的只有挑选值得处理的部份来进行。当挑选的工作被移到发送后,RxJava 的传送机制表面上看起来就是简单地转了一手,但是如果去追踪其源代码,就可以发现其实底下做了不少的工作。而每一次传送都要运行这些内容,可以想见在数量到达一定的程度之后,就会显现出可观的效能差距。

由于 Observable 在定义上所形成的限制使然,同一个发送源无法把的信息分配至不同的 Thread 上送出。RxStore 为了要让每个资料处理要求可以独立、同步地进行,所以才会在接收到信息后,以不同的 Thread 进行后续的工作。

在 RxStore 里提供了一个 getExecutor Method,可以使用 ThreadPool 来做为背压的替代方案,但是并没有像背压一样有可以控制上游的功能。在实作 getExecutor 时要注意,不要直接在回传时 New 一个 ThreadPool 的 Instance。因为 getExecutor 是在每一次收到信息后调用一次。以上的做法,也等同于每一次收到信息就拿到一个 ThreadPool 的 Instance,每一个 ThreadPool 都只会产生一个 Thread,这就失去了使用 ThreadPool 的用意。

最容易出现以上问题的情况是使用 Executors 来取得 ThreadPool,一般的情况下很容易忽略 Executors 其实是每次调用就产生一个 Instance。所以当以 return Executors.newFixedThreadPool(poolSize); 的方式回传 getExecutor 时,一开始也许显示不出问题而被略过,但是一但信息爆量后,就会因为产生 Thread 的数量到达上限而中止运作。

以上,是这次补充的内容,让使用 FluxJava 的朋友做为参考。

flux java_FluxJava 新增 RxJava2 的支援功能相关推荐

  1. RDIFramework.NET V2.9版本 WinFom部分新增与修正的功能

    RDIFramework.NET  V2.9版本 WinFom部分新增与修正的功能 转眼间RDIFramework.NET框架走了快6个年头了,随着一个版本一个版本的升级改造,现在已经越来越完美了.使 ...

  2. WiFi万能钥匙发布iOS4.0新增骚扰电话拦截功能

    近日,连尚网络旗下产品WiFi万能钥匙发布了iOS4.0最新版本.根据用户的需求反馈,WiFi万能钥匙iOS4.0新增了骚扰电话拦截等多个功能.版本更新后,WiFi万能钥匙在连接成功率和使用流畅程度上 ...

  3. java8 注解增强_Java8新增的重复注解功能示例

    本文实例讲述了Java8新增的重复注解功能.分享给大家供大家参考,具体如下: 一 点睛 在Java 8以前,同一个程序元素前最多只能使用一个相同类型的Annotation:如果需要在同一个元素前使用多 ...

  4. SQL Server2014 SP2新增的数据库克隆功能

    SQL Server2014 SP2新增的数据库克隆功能 原文:SQL Server2014 SP2新增的数据库克隆功能 SQL Server2014 SP2新增的数据库克隆功能 创建测试库 --创建 ...

  5. 互联网晚报 | 8月30日 星期一 | 微信公众号新增“我的商店”功能;vivo明年上半年推出平板;商汤科技在港递交IPO招股书...

    今日看点 ✦ 华为鸿蒙Harmony OS 2升级用户超7000万,距离破亿再进一步 ✦ vivo执行副总裁胡柏山:1+3+N布局IoT,明年上半年推出平板 ✦ 微信公众号新增"我的商店&q ...

  6. 印象笔记打开错误_印象笔记新增桌面便签功能

    印象笔记最新的 macOS 客户端 9.0.0 发布了新功能:桌面便签,可以非常方便的将笔记置顶放置在桌面,充当传统的便签功能.@Appinn 注意此版本为国内团队发布的印象笔记客户端,但支持登录 E ...

  7. 微信“拍一拍”新增“炸一炸”功能;爱奇艺 CEO:会费涨价是行业必然趋势;微软终止 Windows 10X 开发|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  8. 萤石云好友分享的监控怎么看_助力开学季丨萤石云APP新增群组分享功能、扩容优惠套餐!...

    开学季 萤石云新功能上线 又是一年忙碌充实的开学季,小小少年们又回到了学校,萤石幼儿园校长却多了份幸福的烦恼:宝爸宝妈们都想看自家孩子的上课录像,可每次只能跨过班主任直接向校长申请:小班的同学座位升到 ...

  9. 黑鲨可以换鸿蒙系统吗,黑鲨游戏手机系统更新:新增人脸识别等功能

    [TechWeb报道]6月25日消息,发布两个多月来,黑鲨游戏手机以其极佳的游戏性能和极致的性价比,获得了广泛发的市场认可,今天,黑鲨游戏手机迎来了OTA重磅更新. 根据官方公布的更新内容,可以看出, ...

最新文章

  1. PyTorch 自动微分
  2. 计算机网络中网络拓扑,计算机网络基础知识:不同的网络拓扑结构对网络的影响...
  3. 提升职场价值,把握成长方向
  4. tomcat和resin的安装配置
  5. e站app改内置hosts_米家踢脚线电暖器E评测:符合现代家居审美 全屋取暖“小钢炮”...
  6. 解决:java.lang.IllegalStateException: ApplicationEventMulticaster not initialized
  7. 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...
  8. flutter英语怎么说_美国人天天说的英语:“你搞反了”英语怎么说?
  9. python定义变量类型列子_Python系列课程-变量类型
  10. SHELL中获取函数返回值
  11. 千锋2015.04月最新C语言基础视频教程
  12. cs 5 下载地址 、视频教程、安装教程
  13. oracle 自定义分词器,自定义分词器和自定义词典
  14. windows启动时自动运行程序(登录或不登录都可以的)
  15. 2021最新 JDK17 之 JAVA基础 Stream 流
  16. 巧用c语言风格的多行注释/**/
  17. POI之图片导出到PPT简单实例
  18. linux6查看hba卡型号,Centos系统查询hba卡型号
  19. 爱奇艺万能播放器微软商店地址
  20. 巨建华:巨头与传统金融战争方始,FinTech还须技术路径破局

热门文章

  1. 视频系列:RTX实时射线追踪(下)
  2. LCD: 2D-3D匹配算法
  3. js函数语法:ASCII 码的相互转换,字符串操作,数学计算
  4. tar 和gzip 的区别
  5. django文件上传
  6. switch case
  7. [转] PuTTY + Xming 远程使用 Linux GUI
  8. http账户密码的截取
  9. 【转】oracle PLSQL基础学习
  10. Access应用日志一