Advanced RxJava

NEVER STOP

Subjects(三,完结):支持 backpressure 的 PublishSubject

原文 Subjects (part 3 - final) 介绍 本文作为 Subject 系列最后一篇文章,将会实现一个 PublishSubject 的变体。为了让这个过程更有趣,这个 PublishSubject 会遵循 backpressure,当订阅者请求得没那么快时,不会将它“淹没”。 PublishSubject PublishSubject 的主要类结构和上一篇文章中的...

Subjects(二):实现自定义 Subject 的要求、相关的工具类以及算法

原文 Subjects (part 2) 介绍 在本文中,我将讲讲编写一个 Subject 应该满足的要求,相关的工具类以及算法,最后我会根据上述内容实现一个支持 backpressure 的 Subject:UnicastSubject。 要求 由于 Subject 继承自 Observable 且实现了 Observer,所以它要遵循这两者的契约: [Observer] ...

Subjects(一):Subject 概念和 RxJava 中的标准实现

原文 Subjects (part 1) 介绍 我猜有很多人都恨死 Subject 了,但我还是要写一个关于它的系列文章。 有些人觉得它是响应式编程世界里面的可变状态,但我并不这样认为,然后他们就进一步叫嚣:不要使用 Subject,而是更多地使用 Observable.create(): Observable.create(s -> { int i = 0; wh...

Reactive-Streams API(四,完结):SubscriptionArbiter 的使用

原文 The Reactive-Streams API (part 4 - final) 介绍 在这篇介绍 Reactive-Streams API 的最后一篇文章中,我会讲讲我们对 SubscriptionArbiter(ProducerArbiter 的一个兄弟) 的高频使用需求,这一点可能会让很多人感到惊讶,当涉及到多个数据源、调度、其他异步内容时,我们将会很频繁的用到它。 在 ...

Reactive-Streams API(三):资源管理与 TakeUntil

原文 The Reactive-Streams API (part 3) 介绍 在本文中,我将讲解如何把 rx.Subscriber 管理资源的能力移植到 Reactive-Streams API 中。但是由于 RS 并未明确任何资源管理方面的要求,所以我们需要引入(把 rx.Subscription 重命名)我们自己的容器类型,并把它加入到 RS 的 Subscriber 的取消逻辑中...

Reactive-Streams API(二):SingleSubscription,SingleDelayedSubscription 和 RangeSubscription

原文 The Reactive-Streams API (part 2) 介绍 在本文中,我将把我们以前的 SingleProducer 和 SingleDelayedProducer 移植到基于 reactive-streams 的 Subscription。 首先,很多人可能认为这个转换过程很麻烦,但幸运的是,如果我们已经想清楚了在 rx.Producer 中如何实现 reques...

SubscribeOn 和 ObserveOn

原文 SubscribeOn and ObserveOn 注:这篇文章八月份就翻译完成了,当时是为了加深自己对 subscribeOn 和 observeOn 的理解,本打算按照原文作者的发表顺序发布译文,但今天在写拆轮子系列:拆 RxJava,里面涉及到了这块内容,为了便于援引,所以提前发布,还好发布在 scheduler 之后也算比较合理。 介绍 在响应式编程生态中,最令人疑惑的一对...

Reactive-Streams API(一):概览

原文 The Reactive-Streams API (part 1) 介绍 在我(原作者)个人看来,Reactive-Streams API 是目前描述异步、取消、支持 backpressure 数据流时最优雅的 API 了,它受到了 RxJava 很多影响,替换了由 Erik Meijer 提出的 IObservable/IObserver 设计。 回到 4 月份,我花了一周的时...

调度器 Scheduler(四,完结):实现 GUI 系统的 Scheduler

原文 Schedulers (part 4 - final) 介绍 在关于 Scheduler 的最后一篇文章(本文)中,我将讲讲如何在那些没有暴露出 ExecutorService 的系统中实现 scheduler,例如 GUI 的事件循环线程。 不基于 Executor 服务的 scheduler 在一些类似于 Java AWT 事件循环的调度系统中,并没有提供 Future 这...

调度器 Scheduler(三):包装多线程 Executor

原文 Schedulers (part 3) 介绍 在本文中,我将讲讲如何把已有的多线程 Executor 包装为一个 scheduler,并且遵循 Scheduler 和 Worker 的规则。 Worker 最重要的一个规则就是有序提交的非延迟任务要按序执行,但是 Executor 的线程是随机取走任务,而且是并发乱序执行的。 解决办法就是使用我们以前介绍过的“队列漏”,并且对调...