Node.js es un tiempo de ejecución multiplataforma y de código abierto que se basa en el motor JavaScript v8 de Chrome. Básicamente, hoy en día es muy popular. Muchos servidores usan node.js para ejecutar aplicaciones.
¿Por qué es tan famoso?
Hay principalmente dos características que hacen famoso a Node.js:
- E/S sin bloqueo
- Asincrónico
E/S sin bloqueo: considere un servidor y un cliente y el cliente envía la solicitud de algunos datos y luego el servidor envía la respuesta al cliente. ¿Qué sucede cuando llega una solicitud múltiple (E/S)?
El Node básicamente ejecuta un solo hilo, pero lo que hace cuando llega la solicitud es enviar esa solicitud a otros trabajadores, que los trabajadores procesan la solicitud. La solicitud puede ser una operación de E/S, obtener datos de la base de datos o interactuar con otros servidores para realizar la operación. Entonces, por esto, no hay demora en aceptar la solicitud.
Comparémoslo con algún otro servidor como Tomcat, tiene unos 200 subprocesos en ejecución, lo que significa que puede aceptar 200 requests, y si llega la solicitud 210, esa solicitud 10 tiene que esperar algún tiempo. Esto se puede resolver usando node.js. Pero detrás de escena, node.js usa la biblioteca libuv que se creó especialmente para node.js y también puede ser utilizada por otros marcos. Esta libuv está construida usando lenguaje C. C usa internamente kernels del sistema que tienen múltiples subprocesos. En node.js, no estamos usando múltiples subprocesos. Pero detrás del Node se utiliza el concepto de hilos múltiples.
Asíncrono: en el no bloqueo, hemos discutido solo la solicitud, pero ¿qué pasa si el proceso del cliente 1 se completa y el servidor envía la solicitud? Aquí viene el concepto asíncrono. El movimiento cuando obtengamos el Node de respuesta ejecutará la función de devolución de llamada (bucle de evento). Luego envía la respuesta al cliente.
Se prefiere el Node cuando tenemos más operaciones relacionadas con E/S. Como se retrasa cuando se trata de un trabajo intensivo de la CPU debido a un solo subproceso. Node.js puede manejar hasta 34k transacciones por segundo con una latencia de 2 a 300 milisegundos.