In RxJava stehen 5 verschiedene Scheduler zur Auswahl:
instant () : Erstellt einen Scheduler und gibt ihn zurück, der die Arbeit am aktuellen Thread sofort ausführt.
trampoline () : Erstellt einen Scheduler und gibt ihn zurück, der die Arbeit an dem aktuellen Thread in die Warteschlange stellt, der nach Abschluss der aktuellen Arbeit ausgeführt werden soll.
newThread () : Erstellt einen Scheduler und gibt ihn zurück, der für jede Arbeitseinheit einen neuen Thread erstellt.
computation () : Erstellt einen Scheduler für die Rechenarbeit und gibt ihn zurück. Dies kann für Ereignisschleifen, die Verarbeitung von Rückrufen und andere Rechenarbeiten verwendet werden. Führen Sie keine E / A-gebundenen Arbeiten an diesem Scheduler durch. Verwenden Sie Scheduler. io () stattdessen.
io () : Erstellt einen Scheduler für E / A-gebundene Arbeiten und gibt ihn zurück. Die Implementierung wird durch einen Executor-Thread-Pool unterstützt, der nach Bedarf erweitert wird. Dies kann zum asynchronen Ausführen blockierender E / A verwendet werden. Führen Sie keine Rechenarbeiten an diesem Scheduler durch. Verwenden Sie Scheduler. stattdessen computation () .
Fragen:
Die ersten drei Scheduler sind ziemlich selbsterklärend. Ich bin jedoch ein wenig verwirrt über Berechnung und Io .
- Was genau ist "IO-gebundene Arbeit"? Wird es für den Umgang mit Streams (
java.io
) und Dateien (java.nio.files
) verwendet? Wird es für Datenbankabfragen verwendet? Wird es zum Herunterladen von Dateien oder zum Zugreifen auf REST-APIs verwendet? - Wie unterscheidet sich computation () von newThread () ? Befinden sich alle computation () -Aufrufe jedes Mal in einem einzelnen (Hintergrund-) Thread anstelle eines neuen (Hintergrund-) Threads?
- Warum ist es schlecht, bei IO-Arbeiten computation () aufzurufen ?
- Warum ist es schlecht, io () aufzurufen, wenn Sie Computerarbeiten ausführen?