gpt4 book ai didi

java - RxIoScheduler 线程数不断增加

转载 作者:行者123 更新时间:2023-11-29 00:03:51 26 4
gpt4 key购买 nike

目前使用 rxjava ver 1.2.4 和 rxandroid 1.2.1。我有一个关于 .subscribeOn(Schedulers.io()) 的问题,我从 javadoc 中读到的是:

“该实现由一个 Executor 线程池提供支持,该线程池将根据需要增长。”

从日志中可以看出,每次执行某些任务时,线程数都会不断增加:

12-28 11:17:03.879 D/HistoryDatabaseHelper: RxIoScheduler-22
12-28 11:17:03.918 D/HistoryDatabaseHelper: RxIoScheduler-19
12-28 11:17:03.918 D/HistoryDatabaseHelper: RxIoScheduler-18
  1. 当应用进入空闲状态时,假设没有任何挂起的任务在运行。那么接下来的任务应该用回RxIoScheduler-1,不是吗?
  2. 何时清理所有线程?
  3. 或者只是线程名称让我感到困惑,旧的 Activity 线程(如 RxIoScheduler-1)在完成其工作后会被清除?

我担心应用很快会出现 OOM 或在执行一些繁重的任务时由于打开线程的数量而以某种方式遇到 OOM。

最佳答案

io() Scheduler 托管一个单线程 ScheduledExecutorServices 池,当您使用 observeOn、subscribeOn 和其他采用 Scheduler 的运算符时,这些服务将作为 worker 分发。在关联的序列终止或取消订阅之前,支持 worker 的线程一直处于 Activity 状态。

如果您有多个 Activity 序列,您将获得多个 IO 调度程序线程。一旦完成,它们就会回到池中,准备好被另一个序列重用。但是,还有一个默认的 1 分钟超时,如果线程未被重用,它会停止线程。如果运算符(operator)随后再次从 IO 调度程序中需要一个工作人员,则会启动一个新线程,该线程会在其名称中获取一个新值,因此如果应用程序运行时间足够长,您可能会得到 19、2002 等。

如果您的序列没有终止并且只是不断堆积,最终耗尽操作系统线程,您可能会遇到 OOM。

关于java - RxIoScheduler 线程数不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41355066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com