CPU密集型任务需要计算调度器,那么为什么RxJava要用它来延迟
delay()
、timer()
、interval()
等运算符?
首先,总是提供重载,您可以在其中指定所需的调度程序。
其次,许多用途是在需要延迟或周期性时使用的,但是一旦计时器触发,您就会有一个完整的计算密集型工作负载。
如果计算调度程序限制为 10 个线程,我们可以同时拥有 100 个计时器吗?
您不需要像计时器一样多的线程,因为等待不是通过单独休眠计时器线程来完成的。等待是通过可能在一个线程上休眠来完成的,直到有一个即时任务或下一个定时任务的时间已经过去。这是执行任意数量的计时器的非常标准的方法,由 Java 的
ScheduledThreadPoolExecutor
处理。
那里用IO调度器是不是错了
使用
io()
通常会导致线程多于内核。混合计算任务和阻塞/io 任务会导致响应延迟问题。你也不能限制io()
调度程序的线程数。
类似地,使用
single()
作为默认值很容易将所有定时计算留在单个线程上,因为用户忘记切换到 computation()
.
使用
newThread()
是在浪费资源,因为定时器被扔得太快或定时器太多了。