¿Cuáles son los beneficios de usar Schedulers.newThread()
frente Schedulers.io()
a Retrofit
una solicitud de red? He visto muchos ejemplos que usan io()
, pero quiero entender por qué.
Situación de ejemplo:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
vs
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
Una de las razones por las que he visto es:
newThread()
crea un nuevo hilo para cada unidad de trabajo. io()
usará un grupo de subprocesos
Pero, ¿cuál es la influencia de ese argumento en la aplicación? ¿Y qué otros aspectos hay?
fuente
Schedulers.io
?Schedulers.io()
entonces podría toparse con los límites de E / S del sistema operativo (por ejemplo, el número máximo de archivos abiertos, el número máximo de conexiones tcp que, por razones de confiabilidad, pueden permanecer abiertas durante un período incluso después de ser desechadas) . Cada nuevo hilo también requiere una cantidad mínima no trivial de RAM (> 512K pero funciona en 1M) por lo que podría quedarse sin RAM.