1. ¿Qué es NodeJs? - pieza/NodeJs_Analysis GitHub Wiki

Nodejs

Historia

Javascript es un lenguaje de programación que inicialmente únicamente era utilizado para añadir dinamismo y funcionalidad a las páginas web. Los navegadores, como Chrome, Firefox y Opera entre otros, son los encargados de ejecutar este código.

El navegador Chrome, diseñado por Google, utiliza el motor V8 para ejecutar Javascript, este es el motor más rápido que existe y además es de código abierto, esto fue algo que Ryan Dahl aprovechó y utilizó como base para crear el proyecto NodeJs.

El repositorio de V8 está disponible en Github. https://github.com/v8/v8. También tiene un sitio web oficial https://v8.dev/.

Logo V8

NodeJs es el entorno de ejecución de Javascript, Node nos permite ejecutar código Javascript fuera del navegador y utilizar la potencia del lenguaje para aplicaciones del lado del servidor.

¿Cómo funciona?

Javascript es un lenguaje Asíncrono por naturaleza, esto significa que puede ejecutar varias tareas al mismo tiempo y no se bloquearán entre ellas, además es orientado a eventos, esto quiere decir que un proceso eperará a que 'suceda algo' para ejecutarse.

Ejemplo:

(function prueba(){
    fetch('https://api.github.com/users/google/repos').then(data => {
        console.log('Recibí la información!');  //Se ejecutará cuando obtenga la respuesta
    });   
    console.log('Hola'); //No espera al request y se ejecuta
})();

//Salida:
//1. Hola
//2. Recibí la información!

En el código anterior estamos ejecutando 2 tareas, la primera es el fetch que realizará una consulta HTTP y al recibir la data imprimirá un mensaje, y la segunda tarea es una impresión de texto, pero la primera tarea no bloquea a la segunda, en un lenguaje síncrono como Java, la tarea número 2 no se ejecutará hasta que la tarea 1 haya terminado. Esta es la diferencia que marca a Javascript y lo hace bastante óptimo.

Concurrencia

A diferencia de Java que crea un hilo por petición y ahí maneja todo el trabajo, Node.js maneja todas sus peticiones en un único hilo de ejecución que es el encargado de organizar todo el flujo de trabajo que se deba realizar, este es conocido como 'Event Loop'.

NodeJs Thread

La eficiencia de Javascript es que este hilo nunca se quedará atorado, ya que este únicamente se encarga de delegar el trabajo a un pool de threads y simplemente espera el resultado. Este pool de threads esta construido con la librería libuv. Esta librería dispone de su propio entorno multithread asíncrono.

Esta librería también es de código abierto, pueden checkear el repositorio aquí: https://github.com/libuv/libuv.

NodeJs estructure