Was sind die Vorteile Schedulers.newThread()
vs Schedulers.io()
in Retrofit
Netzwerkanforderung zu verwenden. Ich habe viele Beispiele gesehen, die io()
verwenden, aber ich möchte verstehen, warum.Nachrüstung mit Rxjava Schedulers.newThread() vs Schedulers.io()
Beispiel Situation:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
vs
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
Einer der Gründe, die ich gesehen habe, ist -
newThread()
erstellt einen neuen Thread für jede Arbeitseinheit. io()
verwendet einen Thread-Pool
Aber was ist der Einfluss dieses Arguments auf die App? Und welche anderen Aspekte gibt es?
Might einen Kommentar Scheduler.io lohnen Zugabe() auf ein basiert unbegrenzter Thread-Pool, der für einige Anwendungsfälle möglicherweise nicht geeignet ist. Siehe http://stackoverflow.com/questions/31276164/rxjava-scheduler-user-cases –
@DaveMoten Welche Anwendungsfälle sind für den Thread-Pool über 'Schedulers.io' ungeeignet? –
Wenn Sie viel Zeit mit 'Schedulers.io()' haben, dann könnten Sie die Grenzen des Betriebssystems erreichen (zum Beispiel maximale Anzahl geöffneter Dateien, maximale Anzahl TCP-Verbindungen, die aus Gründen der Zuverlässigkeit offen bleiben können) für einen Zeitraum auch nach der Entsorgung). Jeder neue Thread benötigt außerdem eine minimale nicht-triviale Menge an RAM (> 512K, aber arbeitet mit 1M), so dass Ihnen der Arbeitsspeicher ausgehen könnte. –