qué es un 'Scheduler' en RxJS


He visto el término Scheduler muy frecuentemente en la documentación.

Pero, ¿qué significa este término? Ni siquiera sé cómo usar un llamado Scheduler. La documentación oficial no me decía qué es exactamente un Scheduler. ¿Es esto solo un concepto común o un concepto específico en RxJS?

 62
Author: yaquawa, 2015-01-26

1 answers

Los schedulers Rx proporcionan una abstracción que permite programar el trabajo para que se ejecute, posiblemente en el futuro, sin que el código de llamada tenga que ser consciente del mecanismo utilizado para programar el trabajo.

Cuando un método Rx necesita generar una notificación, programa el trabajo en un scheduler. Al proporcionar un planificador al método Rx en lugar de usar el predeterminado, puede controlar sutilmente cómo se envían esas notificaciones.

En implementaciones del lado del servidor de Rx (tales como Rx.NET), los planificadores juegan un papel importante. Te permiten programar trabajos pesados en el grupo de subprocesos o subprocesos dedicados, y ejecutar la suscripción final en el subproceso de interfaz de usuario para que puedas actualizar tu interfaz de usuario.

Cuando se usa RxJS, en realidad es bastante raro que deba preocuparse por el argumento scheduler para la mayoría de los métodos. Dado que JavaScript es esencialmente un subproceso único, no hay muchas opciones para la programación y los planificadores predeterminados suelen ser los correctos opción.

Las únicas opciones reales son:

  • immediateScheduler - Ejecuta el trabajo de forma sincrónica e inmediata. Algo así como no usar un programador en absoluto. De este modo, se garantiza que el trabajo programado se ejecute de forma sincrónica.
  • currentThreadScheduler - Similar a immediateScheduler en que el trabajo se ejecuta inmediatamente. Sin embargo, no ejecuta el trabajo recursivamente. Por lo tanto, si el trabajo se está ejecutando y programa más trabajo, entonces ese trabajo adicional se pone en cola para ejecutarse después de que finalice el trabajo actual. Por lo tanto, el trabajo a veces se ejecuta de forma sincrónica y a veces asíncrona. Este planificador es útil para evitar desbordamientos de pila o recursión infinita. Por ejemplo, Rx.Observable.of(42).repeat().subscribe() causaría recursión infinita si se ejecutara en el scheduler immediate, pero como return se ejecuta en el scheduler currentThread por defecto, se evita la recursión infinita.
  • timeoutScheduler - El único programador que soporta el trabajo programado para ser ejecutado en el futuro. Esencialmente usa setTimeout para programar todo el trabajo (aunque si programa el trabajo que se ejecutará "ahora", luego utiliza otros métodos asíncronos más rápidos para programar el trabajo). Cualquier trabajo programado en este scheduler está garantizado para ser ejecutado asincrónicamente.

Puede haber algunos más ahora, como un programador que programa el trabajo en los marcos de animación del navegador, etc.

Si está tratando de escribir código comprobable, entonces casi siempre desea proporcionar el argumento scheduler. Esto se debe a que en sus pruebas unitarias, creará instancias testScheduler, que le permitirán a su unidad controle el reloj utilizado por su código Rx (y por lo tanto controle el tiempo exacto de las operaciones).

 119
Author: Brandon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-27 13:23:11