Dans RxJava, vous avez le choix entre 5 planificateurs différents :
immediate () : crée et renvoie un planificateur qui exécute le travail immédiatement sur le thread actuel.
trampoline () : crée et renvoie un planificateur qui met en file d'attente le travail sur le thread en cours à exécuter une fois le travail en cours terminé.
newThread () : crée et renvoie un planificateur qui crée un nouveau thread pour chaque unité de travail.
computation () : crée et renvoie un planificateur destiné au travail de calcul. Cela peut être utilisé pour les boucles d'événements, le traitement des rappels et d'autres travaux de calcul. N'effectuez pas de travail lié aux E / S sur ce planificateur. Utilisez des planificateurs. io () à la place.
io () : crée et renvoie un planificateur destiné au travail lié aux E / S. L'implémentation est soutenue par un pool de threads Executor qui augmentera selon les besoins. Cela peut être utilisé pour effectuer des E / S de blocage de manière asynchrone. N'effectuez pas de travail de calcul sur ce planificateur. Utilisez des planificateurs. calcul () à la place.
Des questions:
Les 3 premiers ordonnanceurs sont assez explicites; cependant, je suis un peu confus au sujet du calcul et de io .
- Qu'est-ce que le "travail lié aux entrées-sorties"? Est-il utilisé pour traiter les flux (
java.io
) et les fichiers (java.nio.files
)? Est-il utilisé pour les requêtes de base de données? Est-il utilisé pour télécharger des fichiers ou accéder aux API REST? - En quoi computation () est-elle différente de newThread () ? Est-ce que tout les appels computation () sont sur un seul thread (en arrière-plan) au lieu d'un nouveau thread (en arrière-plan) à chaque fois?
- Pourquoi est-il mauvais d'appeler computation () lors d'un travail IO?
- Pourquoi est-il mauvais d'appeler io () lors d'un travail de calcul?