切换线程或在I / O线程上工作成本更高?

时间:2018-01-21 15:19:41

标签: multithreading rx-java rx-java2

repository.data
.subscribeOn(Schedulers.io())
.map { data <- 'do some computations' ... }
.subscribe()

在执行map操作(.observeOn(Schedulers.computation())之前切换到计算调度程序是否更好?

如果我们观察 多个来源 依赖彼此怎么办?就像获取 data1 映射一样,然后根据 data1 获取 data2 ,然后再次映射< / em>的。在这种情况下,我们必须在每个计算操作数据请求之间更改线程。

1 个答案:

答案 0 :(得分:0)

这个问题没有直接答案。您必须始终考虑特定情况。虽然根据这些知识可以遵循一些规则:

  1. 计算线程池具有最大线程数,并且大小基于您使用的设备。最常用的是4个线程池。
  2. IO线程池基本上是无限制的,这意味着如果您同时启动100个操作,将创建100个线程,因此请谨慎使用它。
  3. 切换线程总是会造成一些性能下降,因为它的附加操作符可以强制它在队列中等待。
  4. 真正的问题是:这个任务是否很重,我必须切换线程?在大多数情况下,网络呼叫或数据库呼叫占用的时间最多,而其他运营商则非常快。简单映射或迭代1000个元素的数组基本上是在瞬间完成的。
  5. 另一个问题是:我是否在后台执行了很多任务,我必须释放这个帖子?这真的有帮助吗?是否有人在等待此调度程序释放一些线程?
  6. 这些是我头脑中的规则。有些事情我可能会忘记,但通常这些步骤可以帮助您决定是否必须切换线程。希望它有所帮助:)