web-dev-qa-db-fra.com

Mise à niveau avec Rxjava Schedulers.newThread () vs Schedulers.io ()

Quels sont les avantages d'utiliser Schedulers.newThread() vs Schedulers.io() dans la demande réseau Retrofit. J'ai vu de nombreux exemples qui utilisent io(), mais je veux comprendre pourquoi.

Exemple de situation:

observable.onErrorResumeNext(refreshTokenAndRetry(observable))
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())...

contre

observable.onErrorResumeNext(refreshTokenAndRetry(observable))
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())...

Une des raisons que j'ai vu est -

newThread() crée un nouveau fil pour chaque unité de travail. io() utilisera un pool de threads

Mais quelle est l'influence de cet argument sur l'application? Et quels sont les autres aspects?

83
Mikelis Kaneps

Vous avez raison de dire que l’avantage d’utiliser Schedulers.io() réside dans le fait qu’il utilise un pool de threads, alors que Schedulers.newThread() ne le fait pas.

La principale raison pour laquelle vous devriez envisager d'utiliser des pools de threads est qu'ils gèrent un certain nombre de threads pré-créés qui sont inactifs et en attente de travail. Cela signifie que lorsque vous avez du travail à faire, vous n'avez pas besoin de passer par la surcharge de créer un fil. Une fois que votre travail est terminé, ce fil peut également être réutilisé pour des travaux futurs au lieu de créer et de détruire constamment des fils.

La création de threads peut être coûteuse. Il est donc généralement utile de réduire le nombre de threads créés à la volée.

Pour plus d'informations sur les pools de threads, je recommande:

96
Tanis.7x