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. oracle创建序列seq起始值为1_Oracle修改序列(Sequence)起始值问题
  2. dev-c++官网位置和源码/库位置
  3. 越是被吐槽,女博士这个群体就越强!!
  4. 41 WM配置-作业-定义打印控制
  5. Linux 时间同步问题_qingshanli1988-ChinaUnix博客
  6. Web开发之一:Web UI技术综述
  7. 2021-08-20 解决layUi 选项卡切换表格大小不匹配问题
  8. 学校计算机机房台账,机房工作
  9. validators配置要点及No result defined for action报错解决方案
  10. 如何从 0 到 1 参与 Flink 社区?
  11. FreeBSD使用网易镜像来安装软件
  12. matlab中subs赋值范围,[转载]Matlab的accumarray(subs, val) 解释
  13. 五行灵根 鸿蒙珠,异世鸿蒙武神
  14. vue将文件/图片批量打包下载
  15. 阿里视频云点播端体验Demo
  16. anaconda安装python3.6_Windows10配置Anaconda+Python3.6+TensorFlow+PyCharm
  17. Qt部分拉伸的背景图片
  18. 数组测验1 7-5 冒泡法排序 (20 分)
  19. jdk配置环境变量(win10)
  20. 网站白名单可行性分析

热门文章

  1. intent传递有没有大小限制,是多少?
  2. linux常用命令(转载)
  3. inux 软件编译、安装、删除
  4. linux epoll用法
  5. 转 前端工程师凭什么这么值钱?
  6. 数据导出为Excel(未完)
  7. Go 学习笔记(50)— Go 标准库之 net/url(查询转义、查询参数增/删/改/查、解析URL)
  8. num2cell用法
  9. nodejs文件上传报错总结
  10. Android系统默认Home应用程序(Launcher)的启动过程源代码分析