В чем разница между Schedulers.io() и Schedulers.computation()

В couchbase, Observables

В чем разница между: Schedulers.io() и Schedulers.computation()

Ответ 1

Из документации rx:

Schedulers.computation() - предназначен для вычислительной работы, такой как циклы событий и обработка обратного вызова; не используйте этот планировщик для ввода-вывода (вместо этого используйте Schedulers.io()); количество потоков по умолчанию равно числу процессоров


Schedulers.io() - предназначен для работы с привязкой к I/O, такой как асинхронная производительность блокировки ввода-вывода, этот планировщик поддерживается пулом потоков, который будет расти по мере необходимости; для обычной вычислительной работы, переключитесь на Schedulers.computation(); Schedulers.io() по умолчанию является CachedThreadScheduler, который является чем-то вроде нового планировщика потоков с кэшированием потоков

Ответ 2

Краткое введение в планировщики RxJava.

  • Schedulers.io() - используется для выполнения операций, не требующих значительных ресурсов процессора, таких как сетевые вызовы, чтение дисков/файлов, операции с базой данных и т.д. Это поддерживает пул потоков.

  • Schedulers.newThread() - при этом новый поток будет создаваться каждый раз при планировании задачи. Обычно предлагается не использовать планировщик, если нет очень длительной операции. Потоки, созданные с помощью newThread(), не будут использоваться повторно.

  • Schedulers.computation() - этот график может использоваться для выполнения ресурсоемких операций, таких как обработка больших данных, обработка растровых изображений и т.д. Количество потоков, созданных с помощью этого планировщика, полностью зависит от числа доступных ядер ЦП.

  • Schedulers.single() - этот планировщик будет выполнять все задачи в порядке их добавления. Это можно использовать, когда требуется последовательное выполнение.

  • Schedulers.immediate() - этот планировщик выполняет задачу сразу же синхронно, блокируя основной поток. Schedulers.trampoline() - выполняет задачи в порядке "первым вошел - первым вышел". Все запланированные задачи будут выполняться по очереди, ограничивая количество фоновых потоков одним.

  • Schedulers.from() - это позволяет нам создавать планировщик из исполнителя, ограничивая количество создаваемых потоков. Когда пул потоков занят, задачи будут поставлены в очередь.