web-dev-qa-db-de.com

Nachrüstung mit Rxjava Schedulers.newThread () vs Schedulers.io ()

Welche Vorteile bietet die Verwendung von Schedulers.newThread() vs Schedulers.io() in Retrofit Netzwerkanforderungen? Ich habe viele Beispiele gesehen, die io() verwenden, aber ich möchte verstehen, warum.

Beispielsituation:

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 welchen Einfluss hat dieses Argument auf die App? Und welche anderen Aspekte gibt es?

83
Mikelis Kaneps

Sie haben Recht, dass der Vorteil der Verwendung von Schedulers.io() darin besteht, dass ein Threadpool verwendet wird, während dies bei Schedulers.newThread() nicht der Fall ist.

Der Hauptgrund für die Verwendung von Thread-Pools besteht darin, dass sie eine Reihe von vorab erstellten Threads verwalten, die inaktiv sind und auf die Arbeit warten. Dies bedeutet, dass Sie, wenn Sie Arbeit erledigen müssen, nicht den Aufwand für das Erstellen eines Threads durchlaufen müssen. Sobald Ihre Arbeit erledigt ist, kann dieser Thread auch für zukünftige Arbeiten wiederverwendet werden, anstatt ständig Threads zu erstellen und zu zerstören.

Das Erstellen von Threads kann teuer sein. Daher ist es im Allgemeinen gut, die Anzahl der Threads, die Sie im laufenden Betrieb erstellen, zu minimieren.

Für weitere Informationen zu Thread-Pools empfehle ich:

96
Tanis.7x