当前位置: 首页 > 知识库问答 >
问题:

rxjava-schedulers vs executorservice?

萧自珍
2023-03-14

我预感到,对于RxJava中计算量高、并行化的任务,传统的executorservice会比scheduler快。

我认为这个密码

Observable<MyItem> source = ...

source.flatMap(myItem -> myItem.process().subscribeOn(Schedulers.computation()))
.subscribe();

我会跑得比这慢

final ExecutorService svc = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
Observable<MyItem> source = ...

source.flatMap(myItem -> myItem.process().subscribeOn(Schedulers.from(svc)))
.finallyDo(svc::shutdown)
.subscribe();

我将这两种方法与我在工作中所做的一个典型的并行过程进行了比较,我得到了以下结果。

EXECUTOR

START: 2016-01-25T09:47:04.350
END: 2016-01-25T09:48:37.181
TOTAL TIME (SEC): 92


COMPUTATION SCHEDULER

START: 2016-01-25T09:50:37.799
END: 2016-01-25T09:54:23.674
TOTAL TIME (SEC): 225

共有1个答案

孙佑运
2023-03-14

我做了几个测试,发现创建自己的executorservice实际上可以提高并行化性能。我在这里写了一篇关于它的博客文章。

 类似资料:
  • RxJava 是 Reactive Extensions 的 Java VM 实现,Reactive Extensions 是一个通过使用可观察序列来组成异步和基于事件的程序的库。 它扩展了 observer 模式,以支持数据/事件序列,并增加了一些操作符,使用户能够声明性地将序列组合在一起,同时抽象出低级线程、同步、线程安全和并发数据结构等方面的问题。 示例代码: package rxjava.

  • 编辑:以下是正在发生的事情的大致时间线: 这里有一个链接,指向我制作的一个简单的图,它代表了我想要发生的事情:图

  • 主要内容:RxJava Schedulers from 介绍,RxJava Schedulers from 示例RxJava Schedulers from 介绍 Schedulers.from(Executor) 方法将一个 Executor 转换成一个新的 Scheduler 实例。 RxJava Schedulers from 示例 输出结果为:

  • 主要内容:RxJava Schedulers io 介绍,RxJava Schedulers io 示例RxJava Schedulers io 介绍 Schedulers.io() 方法创建并返回一个用于 IO 绑定工作的调度程序。线程池可以根据需要进行扩展。最适合 I/O 密集型操作。 RxJava Schedulers io 示例 输出结果为:

  • 主要内容:RxJava Schedulers computation 介绍,RxJava Schedulers computation 示例RxJava Schedulers computation 介绍 Schedulers.computation() 方法创建并返回一个用于计算工作的调度程序。要调度的线程数取决于系统中存在的 CPU。每个 CPU 允许一个线程。最适合事件循环或回调操作。 RxJava Schedulers computation 示例 输出结果为:

  • 主要内容:RxJava Schedulers newThread 介绍,RxJava Schedulers newThread 示例RxJava Schedulers newThread 介绍 Schedulers.newThread() 方法创建并返回一个 Scheduler,它为每个工作单元创建一个新线程。 RxJava Schedulers newThread 示例 输出结果为:

  • 主要内容:RxJava Schedulers trampoline 介绍,RxJava Schedulers trampoline 示例RxJava Schedulers trampoline 介绍 Schedulers.trampoline() 方法创建并返回一个调度程序,该调度程序将当前工作完成后要执行的当前线程上的工作排队。 RxJava Schedulers trampoline 示例 输出结果为:

  • 主要内容:RxJava AsyncSubject类 介绍,RxJava AsyncSubject类 声明,RxJava AsyncSubject类 示例RxJava AsyncSubject类 介绍 AsyncSubject 发出唯一的最后一个值,后跟一个完成事件或接收到的错误给观察者。 RxJava AsyncSubject类 声明 RxJava AsyncSubject类 示例 输出结果为: