在RxJava中,有5种不同的调度程序可供选择:
Immediate():创建并返回一个Scheduler,该Scheduler立即在当前线程上执行工作。
trampoline():创建并返回一个调度程序,该调度程序在当前工作完成后将要在当前线程上执行的工作排队。
newThread():创建并返回一个Scheduler,该Scheduler为每个工作单元创建一个新的Thread。
Calculation():创建并返回用于计算工作的Scheduler。这可以用于事件循环,处理回调和其他计算工作。不要在此调度程序上执行IO绑定工作。使用计划程序。io()代替。
io():创建并返回用于IO绑定工作的Scheduler。该实现由Executor线程池支持,该线程池将根据需要增长。这可用于异步执行阻塞IO。不要在此调度程序上执行计算工作。使用计划程序。Calculation()代替。
问题:
前三个调度程序很容易说明。但是,我对计算和io有点困惑。
- 什么是“ IO绑定工作”?它用于处理流(
java.io
)和文件(java.nio.files
)吗?它用于数据库查询吗?它是否用于下载文件或访问REST API? - 如何计算()从不同newThread() ?是否所有的Calculation()调用都在单个(后台)线程上,而不是每次都在一个新的(后台)线程上?
- 为什么在进行IO工作时调用calculation()很糟糕?
- 为什么在执行计算工作时调用io()不好?