Advanced RxJava

NEVER STOP

操作符熔合(二)

原文 Operator-fusion (part 2 - final)。 介绍 在上篇中,我介绍了操作符熔合的一些相关概念。在本文中,我将详细讲解实现操作符熔合的 API 和协议。 当前的操作符熔合都只适用于相邻的两个操作符,且基于双方都能互相知晓对方类型的前提,而在微熔合中,如果双方都同意新的协议,那将忽略 Reactive-Streams(RS) 规范而是用新的协议。 宏熔合的结...

如何编写自定义响应式基础类型

原文 Writing a custom reactive base type。 介绍 一直以来,大家都在问如何实现自己的响应式类型。尽管 RxJava 的 Observable 有大量方法,也允许通过 lift()、extend() 以及 compose() 进行扩展,大家仍会希望 Observable 拥有某个 xyz() 操作符,或者在某个调用链中不允许调用 uvw()。 第一个情...

操作符熔合(一)

原文 Operator-fusion (Part 1)。 介绍 操作符熔合是响应式编程领域最尖端的研究话题之一,它的目的是把数据流中使用的多个操作符以某种方式结合起来,进而降低开销(时间,内存)。 (其他尖端的话题包括:1. 响应式 IO;2. 更多原生的异步并行序列;3. 透明远程查询(transparent remote reactive queries)。) 操作符熔合最关键的...

RxJava 设计回顾

原文 RxJava design retrospect。 介绍 RxJava 已经发布三年多了,期间也经历了好几次重大的版本变化。在本文中,我将指出一些我个人认为设计和实现过程中的不足之处。 但不要误会,这并不是说 RxJava 不好,或者我知道怎么做得“更好”。这对所有参与其中的人来说都是一个学习的过程,关键是,我们能否从这些问题中吸取教训,在下一个大版本中做得更好。 同步取消订阅...

FlatMap 技术揭秘(二)

原文 FlatMap (part 2)。 介绍 在本文中,我们将会丰富我们 flatMap 实现的功能,并提升它的性能。 RxJava 的 flatMap 提供了最大并发数限制,也就是最多同时允许订阅到 mapper 产生的 Observable 的数量,还提供了错误延迟功能,允许延迟任何上游产生的错误,包括主上游。 并发限制 由于历史原因,RxJava 的 flatMap(以及我...

FlatMap 技术揭秘(一)

原文 FlatMap (part 1)。 介绍 在本文中,我将开始对使用最广泛、误解也最多同时也是最复杂的操作符 flatMap 进行一次里里外外的大揭秘。 flatMap 是迄今为止最有用的操作符,因为它能让我们把简单的输入事件转换为任何我们想要的事件,我们可以控制时间、位置甚至事件数量。flatMap 被误解是因为诞生太晚,没有足够的时间充分展示它的使用,而且使用它经常伴随着函数式...

全新 Completable API(二)

原文 The new Completable API (part 2)。 介绍 在本文中,我将展示如何实现 Completable 的操作符(包括数据源和转换操作符)。由于 Completable API 并不会发出数据,只有 onError 和 onCompleted 事件,所以它的操作符比 Observable 少得多。 Empty 我们首先实现 empty() 操作符,它会在被...

全新 Completable API(一)

原文 The new Completable API (part 1)。 介绍 如果大家关注 GitHub 上 RxJava 的动态,那可能已经注意到有一个关于 rx.Completable 类的 PR。这个 PR 已经被合入了 1.x 分支(被标记为 @Experimental),并极有可能成为 1.1.1 版本的一部分。 在接下来的两篇文章中,我将首先介绍 Completable ...

Asynchronous Event Streams vs. Reactive-Streams

原文 Asynchronous Event Streams vs. Reactive-Streams。 介绍 最近我在 EclipseCon 上看了一场很有意思的演讲,Asynchronous Event Streams – when java.util.stream met org.osgi.util.promise!(演讲视频,规范文档)OSGi 的兄弟们也想更好地解决异步编程的问题...

Reactive Stream 各实现的对比(一)

原文 Comparison of Reactive-Streams implementations (part 1)。 介绍 Reactive-Streams 最近在并发/并行技术圈越来越知名,也出现了好几个不同的实现,最值得关注的包括:Akka-Streams,Project Reactor 和 RxJava 2.0。 在本文中,我将展示如何利用这些库实现简单的数据流,并且用 JMH...