RxJava调度选择
前提:
在RxJava中有5种不同的调度程序可供选择:
- immediate():创建并返回一个在当前线程上立即执行工作的Scheduler。
- trampoline():创建并返回一个Scheduler ,该Scheduler 所在线程并不会立即工作,而是要等待我们所设定的等待时间结束后才可以执行(默认为0),当然,这个延时设置是要设定在Runnable实现内部。还有一点就是所有任务要添加到一个队列中,然后依次执行即可。
- newThread():创建并返回一个Scheduler,为每个任务创建一个新的Thread。
- computation():创建并返回用于计算工作的Scheduler。它可以用于事件循环,处理回调和其他计算工作。注意不要使用该Scheduler执行IO类型的工作,对此,我们可以使用io() 代替。
- io() :创建并返回一个用于IO类型工作的Scheduler。该实现维护了一个Executor线程池,该线程池可根据需要增长。该Scheduler可用于异步执行阻塞IO。不要使用该Scheduler执行计算任务。
问题:
前3个Scheduler解释的非常到位,对computation() 和 io() 有点困惑。
- 究竟什么是“IO-bound work”?它适用于处理streams(
java.io
)和files(java.nio.files
)吗?适用于数据库查询吗?适用于下载文件还是访问REST API? - computation()与newThread() 有什么不同之处?
- 为什么在进行IO任务时调用computation() 会很糟糕?
- 为什么在进行计算任务时调用io() 会很糟糕?