Advanced RxJava

NEVER STOP

Operator 并发原语: producers(三),QueuedProducer

原文 Operator concurrency primitives: producers (part 3) 介绍 在本文中,我将实现一种 producer,它可以按需发出多个数据,同时保证下游的 backpressure 功能正常工作。 我称之为 queued-producer,因为它有一个待发数据的队列,并且在下游请求时重放其中的部分数据。 这种 producer 可能的使用场景...

Operator 并发原语: producers(二),SingleDelayedProducer

原文 Operator concurrency primitives: producers (part 2) 介绍 在第一部分中我花了相当长的篇幅介绍了一个很复杂的 RangeProducer,在第二部分中,我将介绍几种更简单的 Producer。 你可能会思考,为什么不从更简单的 Producer 开始呢?有两个主要原因:1. 我认为介绍 RangeProducer 更有助于我们洞悉 ...

实现操作符时的一些陷阱(一)

原文 Pitfalls of operator implementations (part 1) 介绍 早些时候,实现一个操作符(Operator)是一个相对简单的事情:只需要为上游准备一个被操控的订阅者,并且在 onXXX 方法中实现需要的逻辑即可。 然而大家很快意识到,这种做法有的时候行不通,例如上游是同步且无限事件流时,一旦用户再使用 take(n),就会出问题了。解决办法就是把一...

Operator 并发原语: producers(一),RangeProducer

原文 Operator concurrency primitives: producers (part 1) 介绍 Backpressure 从 RxJava 1.0 正式引入,主要用于进行流量控制,以及把各种操作符无限长度的缓冲队列控制在有限长度内。操作符 backpressure 的实现基于协程(coroutine),实际上我对协程了解甚少。我们可以通过对多种 producer 的实现...

Operator 并发原语:串行访问(serialized access)(二),queue-drain

原文 Operator concurrency primitives: serialized access (part 2) 介绍 在Operator 并发原语:串行访问(serialized access)(一)中,我介绍了串行访问的需求,它是为了让 RxJava 的一些方法以及操作符可以串行执行。我详细介绍了发射者循环(emitter-loop),并展示了如何利用它来实现串行访问的约定...

Operator 并发原语:串行访问(serialized access)(一),emitter-loop

原文 Operator concurrency primitives: serialized access (part 1) 介绍 RxJava 库中最重要的要求就是 Observer/Subscriber 的 onNext,onError 以及 onCompleted 方法需要是串行调用的(译者注:一个事件流,它的事件当然需要是串行发生的,不可能同一个流的多个事件同时发生)。尽管我们称之...