¿Qué es el patrón Reactor en Node.js?

Reactor Pattern se utiliza para evitar el bloqueo de las operaciones de Entrada/Salida. Nos proporciona un controlador que está asociado con las operaciones de E/S. Cuando se van a generar las requests de E/S, se envían a un demultiplexor, que maneja la concurrencia para evitar el bloqueo del modo de E/S y recopila las requests en forma de un evento y los pone en cola.

Hay dos formas en que se realizan las operaciones de E/S:

  1. Bloqueo de E/S: la aplicación realizará una llamada de función y detendrá su ejecución en un punto hasta que se reciban los datos. Se llama como ‘sincrónico’.
  2. E/S sin bloqueo: la aplicación realizará una llamada de función y, sin esperar los resultados, continúa su ejecución. Se llama como ‘Asíncrono’.

Nota: Node.js es de naturaleza asíncrona.

El patrón del reactor se compone de:

  1. Recursos: Son compartidos por múltiples aplicaciones para operaciones de E/S, generalmente más lentas en las ejecuciones.
  2. Desmultiplexor de eventos síncrono/notificador de eventos: utiliza el bucle de eventos para bloquear todos los recursos. Cuando se completa un conjunto de operaciones de E/S, el demultiplexor de eventos envía los nuevos eventos a la cola de eventos.
  3. Event Loop y Event Queue: Event Queue pone en cola los nuevos eventos que ocurrieron junto con su controlador de eventos, par.
  4. Solicitud de controlador/aplicación: esta es, en general, la aplicación que proporciona el controlador que se ejecutará para los eventos registrados en los recursos.

¿Cómo funciona el Patrón Reactor?

  1. Todo comienza con la aplicación. Hace una solicitud y el demultiplexor de eventos recopila esas requests y luego forma colas conocidas como Colas de eventos.
  2. El demultiplexor de eventos lo ejecuta libuv, que es una biblioteca que permite que el código JavaScript (a través de V8) realice E/S, dentro de la red, archivo, etc. Es una biblioteca de E/S asíncrona que permite que Node.js realice E/S.
  3. En el diagrama anterior, solo hay una cola de eventos y hay 7 colas básicas. Esas colas tienen prioridades ascendentes, el bucle de eventos verifica primero la cola que tiene la prioridad más alta.
  4. La cola de temporizadores tiene la prioridad más alta. Las funciones setTimeout y setInterval se ponen en cola aquí. Una vez que los eventos se realizan en esta cola, o se agota el tiempo, el bucle de eventos pasa esas funciones a la pila de llamadas, denominada controlador de ejecución.
  5. Cuando una de las colas de eventos está completa, en lugar de saltar a la siguiente cola, el ciclo de eventos primero verificará las otras dos colas que ponen en cola otras microtareas y procesos llamados funciones nextTick. Luego saltará a la próxima cola.

La cola de devolución de llamada es una cola de eventos y la pila de llamadas es un controlador de ejecución.

Publicación traducida automáticamente

Artículo escrito por sharmaanushka y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *