Quali sono i vantaggi da utilizzare Schedulers.newThread()
rispetto a Schedulers.io()
nella richiesta di rete Retrofit
. Ho visto molti esempi che usano io()
, ma voglio capire perché.Retrofit con Rxjava Schedulers.newThread() vs Schedulers.io()
situazione Esempio:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
vs
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
Uno dei motivi che ho visto è -
newThread()
crea un nuovo thread per ogni unità di lavoro. io()
utilizzerà un pool di thread
Ma qual è l'influenza di tale argomento sull'app? E quali altri aspetti ci sono?
potrebbe essere la pena di aggiungere un commento su Scheduler.io() essendo basato su un pool di thread illimitati che potrebbe non essere appropriato per alcuni casi d'uso. Vedi http://stackoverflow.com/questions/31276164/rxjava-schedulers-use-cases –
@DaveMoten Quali casi d'uso sono inappropriati per il pool di thread tramite 'Schedulers.io'? –
Se si ha molto lavoro simultaneo con 'Schedulers.io()', allora si potrebbe imbattersi in limiti di I/O del sistema operativo (ad esempio il numero massimo di file aperti, il numero massimo di connessioni TCP che possono rimanere aperte per motivi di affidabilità) per un periodo anche dopo essere stato smaltito). Ogni nuovo thread richiede anche una quantità minima non banale di RAM (> 512 K ma funziona su 1 M) in modo da poter esaurire la RAM. –