У RxJava є 5 різних планувальників на вибір:
neposredna () : Створює та повертає Scheduler, який негайно виконує роботу над поточним потоком.
trampoline () : Створює та повертає Scheduler, який черги працює над поточним потоком, який буде виконаний після завершення поточної роботи.
newThread () : Створює та повертає Планувальник, який створює нову Тему для кожної одиниці роботи.
computation () : створює та повертає Scheduler, призначений для обчислювальної роботи. Це можна використовувати для циклів подій, обробки зворотних викликів та інших обчислювальних робіт. Не виконуйте роботи, пов'язані з IO, на цьому планувальнику. Використовуйте планувальники. натомість io () .
io () : Створює та повертає Планувальник, призначений для роботи, пов'язаної з IO. Реалізація підтримується пулом потоків Executor, який зростатиме у міру необхідності. Це можна використовувати для асинхронного виконання блокування вводу-виводу. Не виконуйте обчислювальної роботи на цьому планувальнику. Використовуйте планувальники. обчислення () .
Запитання:
Перші 3 планувальники досить зрозумілі; однак я трохи заплутаний у обчисленні та io .
- Що саме "робота, пов'язана з IO"? Чи використовується для роботи з потоками (
java.io
) та файлами (java.nio.files
)? Чи використовується для запитів до бази даних? Чи використовується для завантаження файлів або доступу до API REST? - Чим обчислення () відрізняється від newThread () ? Це те, що всі виклики для обчислення () виконуються на одному (фоновому) потоці замість нового (фонового) потоку кожного разу?
- Чому погано викликати обчислення () під час роботи вводу-виводу?
- Чому погано викликати io () під час обчислювальної роботи?