Node.js es un entorno de tiempo de ejecución de javascript back-end de código abierto. Se utiliza como servicio de back-end donde javascript funciona en el lado del servidor de la aplicación. De esta forma, javascript se usa tanto en el frontend como en el backend. Node.js se ejecuta en el motor Chrome v8 que convierte el código javascript en código de máquina, es altamente escalable, liviano, rápido y requiere muchos datos.
Funcionamiento de Node.js: Node.js acepta la solicitud de los clientes y envía la respuesta, mientras trabaja con la solicitud, node.js los maneja con un solo hilo. Para operar operaciones de E/S o requests, node.js utiliza el concepto de subprocesos. Thread es una secuencia de instrucciones que el servidor necesita realizar. Se ejecuta en paralelo en el servidor para proporcionar la información a varios clientes. Node.js es un lenguaje de subproceso único de bucle de eventos. Puede manejar requests simultáneas con un solo hilo sin bloquearlo para una solicitud.
Node.js básicamente funciona en dos conceptos
- Asincrónico
- E/S sin bloqueo
E/S sin bloqueo : la E/S sin bloqueo significa trabajar con varias requests sin bloquear el subproceso para una sola solicitud. I/O básicamente interactúa con sistemas externos como archivos, bases de datos. Node.js no se usa para medios de trabajo intensivos de CPU para cálculos, procesamiento de video porque un solo hilo no puede manejar los trabajos de CPU.
Asíncrono: Asíncrono está ejecutando una función de devolución de llamada. En el momento en que obtengamos la respuesta del otro servidor o base de datos, ejecutará una función de devolución de llamada. Las funciones de devolución de llamada se llaman tan pronto como finaliza algún trabajo y esto se debe a que node.js utiliza una arquitectura basada en eventos. El subproceso único no funciona con la solicitud, sino que envía la solicitud a otro sistema que resuelve la solicitud y es accesible para otra solicitud.
Para implementar el concepto del sistema para manejar la solicitud, node.js usa el concepto de Libuv.
Libuv es una biblioteca de código abierto integrada en C. Tiene un fuerte enfoque en la E/S asíncrona, lo que brinda acceso de Node al sistema operativo, el sistema de archivos y las redes de la computadora subyacente.
Libuv implementa dos características extremadamente importantes de node.js
- Bucle de eventos
- Grupo de subprocesos
Bucle de eventos: el bucle de eventos contiene un solo hilo y es responsable de manejar tareas sencillas como ejecutar devoluciones de llamada y E/S de red. Cuando el programa se va a inicializar, se ejecuta todo el código de nivel superior, el código no está en la función de devolución de llamada. Todo el código de las aplicaciones que se encuentra dentro de las funciones de devolución de llamada se ejecutará en el bucle de eventos. EventLoop es el corazón de node.js. Cuando iniciamos nuestra aplicación de Node, el ciclo de eventos comienza a ejecutarse de inmediato. La mayor parte del trabajo se realiza en el bucle de eventos.
Nodejs utiliza arquitectura basada en eventos.
- Se emiten eventos.
- El bucle de eventos los recoge.
- Se llaman devoluciones de llamada.
Cola de eventos: tan pronto como se envía la solicitud, el hilo coloca la solicitud en una cola. Se conoce como una cola de eventos. El proceso como la aplicación que recibe la solicitud HTTP o el servidor o un temporizador emitirán un evento tan pronto como terminen con el trabajo y el bucle de eventos recogerá estos eventos y llamará a las funciones de devolución de llamada que están asociadas con cada evento y la respuesta se envía al cliente. .
El bucle de eventos es un bucle indefinido que recibe continuamente la solicitud y la procesa. Comprueba la cola y espera la solicitud entrante indefinidamente.
Grupo de subprocesos: aunque node.js tiene un solo subproceso, internamente mantiene un grupo de subprocesos. Cuando se aceptan requests sin bloqueo, se procesan en un bucle de eventos, pero al aceptar requests de bloqueo, comprueba los subprocesos disponibles en un grupo de subprocesos, asigna un subproceso a la solicitud del cliente que luego se procesa y se envía de vuelta al bucle de eventos, y se envía respuesta al respectivo cliente.
El tamaño del grupo de subprocesos se puede cambiar:
proceso.env.UV_THREADPOOL_SIZE = 1;
Publicación traducida automáticamente
Artículo escrito por vasantisuthar15 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA