Jakie są korzyści z używania w Schedulers.newThread()
porównaniu Schedulers.io()
z Retrofit
żądaniami sieciowymi. Widziałem wiele przykładów, które używają io()
, ale chcę zrozumieć, dlaczego.
Przykładowa sytuacja:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
vs
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
Jednym z powodów, które widziałem, jest -
newThread()
tworzy nowy wątek dla każdej jednostki pracy. io()
użyje puli wątków
Ale jaki jest wpływ tego argumentu na aplikację? A jakie są inne aspekty?
źródło
Schedulers.io
?Schedulers.io()
możesz uderzyć w limity systemu operacyjnego i / o (na przykład maksymalna liczba otwartych plików, maksymalna liczba połączeń TCP, które ze względu na niezawodność mogą pozostać otwarte przez pewien czas nawet po ich usunięciu) . Każdy nowy wątek wymaga również minimalnej niebanalnej ilości pamięci RAM (> 512K, ale działa na 1M), więc może zabraknąć pamięci RAM.