Advanced RxJava

NEVER STOP

调度器 Scheduler(二):自定义 ExecutorService 使用逻辑的 Worker

原文 Schedulers (part 2) 介绍 在上文中,我介绍了如何利用 RxJava 已有的类来实现自定义的 scheduler。 在本文中,我将更加深入一层,演示如何操控底层的 ExecutorService 以及 RxJava 其他的基础设施,并与之进行交互,而这些都是无法通过 NewThreadWorker 实现的。 ScheduledAction 类 在 Sched...

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

原文 Pitfalls of operator implementations (part 3) 介绍 在本系列中,我们聚焦于一些常见的,或者比较常见而且很微妙的一些实现操作符的陷阱。既然我们已经知道了更多关于 Producer,subscription 容器类,以及 scheduler 的知识,现在我们可以看更多的陷阱了。 9,订阅两次 有些操作符,尤其是那些基于 OnSubscr...

调度器 Scheduler(一):实现自定义 Scheduler

原文 Schedulers (part 1) 介绍 Scheduler 是 RxJava 异步和并行计算的关键。尽管已经存在了很多标准的 scheduler,并且你也可以把一个 Executor 包装成一个 scheduler,我们还是应该理解 scheduler 是如何一步一步实现的,以便我们利用其他的并发资源,例如 GUI 框架的消息循环机制。 Scheduler API 如果你...

Operator 并发原语: subscription-containers(三,完结),基于数组的容器类

原文 Operator concurrency primitives: subscription-containers (part 3 - final) 介绍 在最后一篇关于 subscription 容器类的文章中(本文),我将介绍一种基于数组的 copy-on-write 线程安全容器类。 为什么这一容器类型如此重要?让我反问一句:如果被包含的 subscription 是 Sub...

Operator 并发原语: subscription-containers(二),无锁化 TwoSubscribers

原文 Operator concurrency primitives: subscription-containers (part 2) 介绍 在本文中,我将实现前文中介绍的 TwoSubscribers 的两种无锁化(非阻塞)版本。尽管它们在功能上完全一致,但是在实现的过程中将表现出在处理订阅状态检查和取消订阅时两种不同的哲学。 在状态类中使用 boolean isUnsubscri...

Operator 并发原语: subscription-containers(一),标准容器类与 TwoSubscribers

原文 Operator concurrency primitives: subscription-containers (part 1) 介绍 编写复杂的操作符通常涉及到 subscription 管理以及一系列的 subscription 容器。 有一点值得重申:subscription 容器都有一个终结状态,unsubscribe() 函数被调用之后它们就处于终结状态了,此后增加或...

Operator 并发原语: producers(六-完结),ProducerObserverArbiter

原文 Operator concurrency primitives: producers (part 6 - final) 介绍 你可能已经猜到 Producer 是实现操作符的真正大功臣。只要请求和响应数据不是一比一对应,无论是请求多还是数据多,我们都需要引入中间的 producer 来协调请求和响应数据。 在关于 producer 的最后一篇文章中,我将详细讲解最终的通用的 Pr...

Operator 并发原语: producers(五),ProducerArbiter

原文 Operator concurrency primitives: producers (part 5) 介绍 在编写操作符的时候,同时处理多个数据源以及 backpressure 并非易事。即便简单如在第一个 Observable 发射结束之后继续发射第二个 Observable 的数据这一功能,要正确处理好请求处理和传播,也是存在很大挑战的。 通常在 RxJava 中,尤其是 ...

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

原文 Pitfalls of operator implementations (part 2) 介绍 本文中我将暂停对 producer 的讲解,继续回到实现操作符的陷阱这个话题,而且还会提到使用特定(序列)的 RxJava 操作符时的一些陷阱。 6,不等请求就直接发射(Emitting without request) 假设你要实现一个操作符,它会忽略上游发出的任何数据,并在上游...

Operator 并发原语: producers(四),RangeProducer 优化

原文 Operator concurrency primitives: producers (part 4) 介绍 在实现了相对复杂的 producer 之后,现在是时候关注简单一点的内容了。在本文中,我将对最初介绍的 RangeProducer 进行一次优化:在无限请求时增加一个发射快路径。 在 RxJava 中,如果第一次就请求 Long.MAX_VALUE 等同于请求无限的数据,...