что такое "планировщик" в RxJS



Я видел термин планировщик очень часто в документации.



но, что означает этот термин? Я даже не знаю, как использовать так называемый Scheduler. Официальная документация не сказала мне, что a Scheduler именно. Это просто общая концепция или конкретная концепция в RxJS?

616   1  

1 ответ:

планировщики Rx предоставляют абстракцию, которая позволяет запланировать работу, возможно, в будущем, без вызывающего кода, который должен быть осведомлен о механизме, используемом для планирования работы.

всякий раз, когда метод Rx должен генерировать уведомление, он планирует работу над планировщиком. Поставляя планировщик в метод Rx вместо использования по умолчанию, вы можете тонко управлять тем, как эти уведомления отправляются.

в серверных реализациях Rx (например, Rx.NET), планировщики играют важную роль. Они позволяют планировать тяжелую работу в пуле потоков или выделенных потоках и запускать окончательную подписку в потоке пользовательского интерфейса, чтобы вы могли обновить свой пользовательский интерфейс.

при использовании RxJs на самом деле довольно редко вам нужно беспокоиться о аргументе планировщика для большинства методов. Поскольку JavaScript по существу является однопоточным, существует не так много вариантов планирования, и планировщики по умолчанию обычно являются правильными выбор.

единственный реальный выбор:

  • immediateScheduler - выполняет работу синхронно и сразу. Вроде как не использовать планировщик вообще. Работа, запланированная таким образом, гарантированно выполняется синхронно.
  • currentThreadScheduler - аналогично immediateScheduler в том, что работа выполняется немедленно. Однако он не выполняет работу рекурсивно. Итак, если работа выполняется и расписывается больше работа, затем эта дополнительная работа помещается в очередь для запуска после окончания текущей работы. Таким образом, работа иногда выполняется синхронно, а иногда и асинхронно. Этот планировщик позволяет избежать переполнения стека или бесконечной рекурсии. Например Rx.Observable.of(42).repeat().subscribe() вызовет бесконечную рекурсию, если он побежал на immediate планировщик, но так как return работает на currentThread планировщик по умолчанию бесконечная рекурсия избегается.
  • timeoutScheduler - единственный планировщик, который поддерживает работу планируется выполнить в будущем. По существу использует setTimeout to запланируйте всю работу (хотя если вы запланируете работу для запуска "сейчас", то он использует другие более быстрые асинхронные методы для планирования работы). Любая работа, запланированная в этом планировщике, гарантированно выполняется асинхронно.

теперь может быть еще несколько, например, планировщик, который планирует работу с кадрами анимации браузера и т. д.

если вы пытаетесь написать тестируемый код, то вы почти всегда хотите предоставить аргумент планировщика. Это потому, что в вашем модульные тесты, вы будете создавать testScheduler экземпляры, которые позволят вашему модульному тесту управлять часами, используемыми вашим кодом Rx (и, таким образом, контролировать точное время операций).

Comments

    Ничего не найдено.