RxJava 调度程序的用例
在 RxJava 中,有 5 种不同的调度程序可供选择:
instant():创建并返回一个调度程序,该调度程序立即在当前线程上执行工作。
trampoline():创建并返回一个调度程序,该调度程序将当前线程上的工作排队,以便在当前工作完成后执行。
newThread():创建并返回一个调度程序,该调度程序为每个工作单元创建一个新的线程。
computing():创建并返回用于计算工作的调度程序。这可用于事件循环、处理回调和其他计算工作。不要在此计划程序上执行 IO 绑定的工作。使用计划程序。io() 代替。
io():创建并返回用于 IO 绑定工作的计划程序。该实现由执行器线程池提供支持,该线程池将根据需要增长。这可用于异步执行阻塞 IO。不要在此调度程序上执行计算工作。使用计划程序。计算() 代替。
问题:
前3个调度程序非常不言自明;但是,我对计算和io有点困惑。
- 究竟什么是“IO绑定工作”?它是否用于处理流 () 和文件 ()?它是否用于数据库查询?它是否用于下载文件或访问 REST API?
java.io
java.nio.files
- computing() 与 newThread() 有何不同?是不是所有计算()调用都位于单个(后台)线程上,而不是每次都位于新的(后台)线程上?
- 为什么在执行 IO 工作时调用 computing() 不好?
- 为什么在做计算工作时调用io()不好?