Модернизация с помощью Rxjava Schedulers.newThread() vs Schedulers.io()

Каковы преимущества использования Schedulers.newThread() vs Schedulers.io() в сетевом запросе Retrofit. Я видел много примеров, которые используют io(), но я хочу понять, почему.

Пример ситуации:

observable.onErrorResumeNext(refreshTokenAndRetry(observable))
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())...

против

observable.onErrorResumeNext(refreshTokenAndRetry(observable))
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())...

Одна из причин, которые я видел, -

newThread() создает новый поток для каждой единицы работы. io() будет использовать пул потоков

Но каково влияние этого аргумента на приложение? И какие другие аспекты существуют?

Ответ 1

Вы правы, что преимущество использования Schedulers.io() заключается в том, что он использует пул потоков, тогда как Schedulers.newThread() не делает.

Основная причина, по которой вам следует рассмотреть использование пулов потоков, заключается в том, что они поддерживают ряд предварительно созданных потоков, которые не работают и ждут работы. Это означает, что, когда у вас есть работа, вам не нужно выполнять накладные расходы на создание потока. Как только ваша работа будет завершена, этот поток также может быть повторно использован для будущей работы, а не для постоянного создания и уничтожения потоков.

Потоки могут быть дорогими для создания, поэтому минимизация количества потоков, создаваемых вами на лету, в целом хороша.

Для получения дополнительной информации о пулах потоков, я рекомендую: