Каковы преимущества использования 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()
будет использовать пул потоков
Но как этот аргумент повлиял на приложение? А какие еще есть аспекты?
источник
Schedulers.io
?Schedulers.io()
вы можете столкнуться с ограничениями ввода-вывода ОС (например, максимальное количество открытых файлов, максимальное количество TCP-соединений, которые в целях надежности могут оставаться открытыми в течение определенного периода времени даже после удаления) . Каждый новый поток также требует минимального нетривиального объема ОЗУ (> 512 КБ, но работает с 1 МБ), чтобы у вас могло закончиться ОЗУ.