Cómo es el proceso de ejecución de NodeJS y qué podemos hacer para controlarlo mediante el objeto global process.
Una de las primeras cosas que vamos a aprender en NodeJS es trabajar y entender el proceso de ejecución del programa, que tiene sus particularidades especiales en este lenguaje. En los capítulos de introducción en el Manual de NodeJS ya hemos abordado algunos conceptos bastante interesantes, pero ahora lo veremos aplicado a código.
Antes de comenzar queremos volver a recalcar la naturaleza de NodeJS como un lenguaje de programación de propósito general, con el que podemos hacer todo tipo de aplicaciones. Normalmente comenzaremos con programas que se ejecutarán en la consola de comandos, o terminal, de tu sistema operativo, pero a partir de ahí sus aplicaciones son muy extensas.
Piensa entonces que NodeJS se arranca mediante la consola de comandos y entonces el proceso que se encargará de ejecutarlo es el iniciado con la propia consola.
Single Thread (único hilo)
Una de las características de NodeJS es su naturaleza "Single Thread". Cuando pones en marcha un programa escrito en NodeJS se dispone de un único hilo de ejecución.
Esto, en contraposición con otros lenguajes de programación como Java, PHP o Ruby, donde cada solicitud se atiende en un nuevo proceso, tiene sus ventajas. Una de ellas es que permite atender mayor demanda con menos recursos, uno de los puntos a favor de NodeJS.
Para conseguir que la programación Single Thread de NodeJS pueda producir resultados satisfactorios debemos entender su característica no bloqueante, que abordamos al hablar de la programación asíncrona en el artículo de las características de NodeJS. En resumen, todas las operaciones que NodeJS no puede realizar al instante, liberan el proceso se libera para atender otras solicitudes. Pero como hemos dicho en este artículo nos proponemos aterrizar estas ideas en algo de código que nos permita ir aprendiendo cosas nuevas de NodeJS.
Objeto process
El objeto process es una variable global disponible en NodeJS que nos ofrece diversas informaciones y utilidades acerca del proceso que está ejecutando un script Node. Contiene diversos métodos, eventos y propiedades que nos sirven no solo para obtener datos del proceso actual, sino también para controlarlo.
En la documentación de Node encuentras todo lo que hay en este objeto process: https://nodejs.org/docs/latest/api/process.html
Consultar datos del proceso
Se pueden hacer muchas cosas con el proceso y consultar diversos datos de utilidad. Por ejemplo, veamos el siguiente código donde podemos examinar información diversa sobre el proceso actual y la plataforma donde estamos ejecutando este programa:
console.log('id del proceso: ', process.pid);
console.log('título del proceso: ', process.title);
console.log('versión de node: ', process.version);
console.log('sistema operativo: ', process.platform);
Salir de la ejecución de un programa Node
A veces podemos necesitar salir inmediatamente de la ejecución de un programa en NodeJS. Esto lo podemos conseguir mediante la invocaciónn del método exit() del objeto process.
process.exit();
Básicamente provocará que el programa acabe, incluso en el caso que haya operaciones asíncronas que no se hayan completado o que se esté escuchando eventos diversos en el programa.
El método exit puede recibir opcionalmente un código de salida. Si no indicamos nada se entiende "0" como código de salida.
process.exit(3);
Evento exit
Otra de las cosas básicas que podrás hacer mediante el objeto process es definir eventos cuando ocurran cosas diversas, por ejemplo la salida del programa.
Los eventos en Javascript se definen de manera estándar mediante el método on(), indicando el tipo de evento que queremos escuchar y una función callback que se ejecutará cuando ese evento se dispare. Dado que el evento exit pertenece al process, lo definiremos a partir de él.
process.on('exit', function(codigo) {
console.log('saliendo del proceso con código de salida', codigo);
})
En este caso la función callback asociada al evento exit recibe aquel código de error que se puede generar mediante la invocación del método exit() que conocimos en el anterior punto.
Conclusión
Hemos aprendido algo de conocimiento general sobre NodeJS y algo en particular sobre el proceso de ejecución de un programa escrito en Node, cuya funcionalidad está disponible mediante el objeto global process.
Hemos visto varios ejemplos de propiedades dependientes de process, el método exit(), muy útil para la salida de un programa, así como la definición de uno de los varios eventos disponibles dentro de process, que nos permitirá hacer cosas cuando el programa NodeJS se pare. Con esto tenemos una visión muy general sobre el proceso de ejecución de node, pero comprobarás que hay mucho más en la documentación oficial.
Solo para posibles dudas, dejo aquí un código completo que podrás ejecutar para ver los ejemplos relatados en este artículo:
"use strict"
process.on('exit', function(codigo) {
console.log('saliendo del proceso con código de salida', codigo);
})
console.log('id del proceso: ', process.pid);
console.log('título del proceso: ', process.title);
console.log('versión de node: ', process.version);
console.log('sistema operativo: ', process.platform);
process.exit(3);
console.log('esto no se llegará a ejecutar');
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...