RxJava。为什么 timer()、delay() 等运算符默认使用计算调度程序?

问题描述 投票:0回答:1

CPU密集型任务需要计算调度器,那么为什么RxJava要用它来延迟

delay()
timer()
interval()
等运算符?

  1. 延迟是 CPU 密集型任务吗?如果计算调度程序限制为 10 个线程,我们可以同时拥有 100 个计时器吗?
  2. 那里用IO调度器是不是错了
rx-java
1个回答
0
投票

首先,总是提供重载,您可以在其中指定所需的调度程序。

其次,许多用途是在需要延迟或周期性时使用的,但是一旦计时器触发,您就会有一个完整的计算密集型工作负载。

如果计算调度程序限制为 10 个线程,我们可以同时拥有 100 个计时器吗?

您不需要像计时器一样多的线程,因为等待不是通过单独休眠计时器线程来完成的。等待是通过可能在一个线程上休眠来完成的,直到有一个即时任务或下一个定时任务的时间已经过去。这是执行任意数量的计时器的非常标准的方法,由 Java 的

ScheduledThreadPoolExecutor
处理。

那里用IO调度器是不是错了

使用

io()
通常会导致线程多于内核。混合计算任务和阻塞/io 任务会导致响应延迟问题。你也不能限制
io()
调度程序的线程数。

类似地,使用

single()
作为默认值很容易将所有定时计算留在单个线程上,因为用户忘记切换到
computation()
.

使用

newThread()
是在浪费资源,因为定时器被扔得太快或定时器太多了。

© www.soinside.com 2019 - 2024. All rights reserved.