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:
- 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’.
- 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:
- Recursos: Son compartidos por múltiples aplicaciones para operaciones de E/S, generalmente más lentas en las ejecuciones.
- 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.
- Event Loop y Event Queue: Event Queue pone en cola los nuevos eventos que ocurrieron junto con su controlador de eventos, par.
- 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?
- 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.
- 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.
- 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.
- 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.
- 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