Qué es lo que realmente hace que Node.js sea genial

Mmm….larga historia corta, quería saber cómo funciona el nodo heck. Lee muchos documentos que dicen que es asíncrono, que tiene un solo hilo, que todo se basa en el bucle de eventos y demás. Básicamente, las palabras eran aterradoras, quiero decir que todos los chicos dicen algo enorme usando vocabulario de primera clase y eso me asustaba y mi cerebro estaba como

“Amigo, para, no es tu nivel.”

Bueno, después de tres sesiones continuas de 40 minutos de Pomodoro (por cierto, funciona realmente y escribiré sobre ello en breve) y tres tazas de café negro, creo que finalmente lo he conseguido.

El nodo no es de un solo hilo, sí lo es, pero no exactamente

¡¡¡Qué!!!! Confía en mí, esa fue mi reacción cuando lo encontré por primera vez. Sí, el nodo es single-threaded, o no o sí…. bueno, básicamente maneja el código de usuario en single-thread(donde ocurre la magia del bucle de eventos). Obviamente, el nodo tiene que ser single-threaded coz Js es single-threaded pero algunas partes son manejadas nativamente por libuv y OS que son multi-threaded. Confuso? lo desglosaremos de una manera más simple y volveremos a esto.

El nodo mantiene el hilo único para su código pero todo corre en paralelo

Primero, comencemos con un concepto simple llamado programa síncrono y asíncrono. Un programa sincrónico es algo que ejecuta una cosa a la vez. A menos que esa tarea no esté terminada, no puedes pasar a la siguiente. Mientras que el programa asíncrono le permite pasar a la siguiente línea ejecutando la línea actual paralelamente. Bien, eso es fácil, pero cómo Node.js logra esto? usando un poderoso concepto fácil llamado callbacks.A callback tal como está escrito en los documentos de Node.js, “es una función llamada al completar una tarea dada; esto previene cualquier bloqueo, y permite que otro código sea ejecutado mientras tanto”. Esto significa que siempre que escribimos un código asíncrono puedes usar la función de devolución de llamada diciendo que te llamará cuando esté terminado a medida que pasas a la siguiente cosa. Esto es lo que básicamente es un método sin bloqueo. Node.js maneja las operaciones de E/S de una manera que no bloquea y que contiene las funciones de devolución de llamada para que no se bloquee nada y podamos ejecutar múltiples cagadas simultáneamente.Así que, ahora que sabemos cómo Node.js maneja el código asíncrono, vayamos al verdadero, el infame bucle de eventos. Un bucle de eventos es una cosa que maneja y procesa los eventos y los convierte en llamadas de retorno. Por lo tanto, siempre que llega una llamada de E/S de red, el Nodo la envía al bucle de eventos donde entra en la cola de tareas y comienza a ejecutarse a medida que el Nodo regresa al entorno de tiempo de ejecución y se mueve al siguiente. Mm…. Cada vez que escribimos un Nodo de código asíncrono lleva el script de usuario al único hilo y las operaciones de E/S de fs son manejadas por Libuv y OS, es decir, Libuv tiene algo llamado grupo de hilos donde cada uno de los hilos son asignados a una tarea de la cola de tareas por el bucle de eventos y comienzan a ejecutarse simultáneamente. Por lo tanto, toda la arquitectura de Node.js hace que sea sencillo tener un paralelismo de alto nivel, por lo tanto, esto es lo que hace que Node.js sea genial, teniendo soporte de código asíncrono y ejecutándolo en un solo hilo (aunque no exactamente). Bueno, supongo que esto lo cubre. Espero que esto tenga sentido si no, hágamelo saber – ya que realmente quiero saber más.

Etiquetas

JavascriptNodejsEvent LoopThreadsDesarrollo de software asíncrono y síncronoEntornos de tiempo de ejecuciónCodificación

Comentarios

nikosv3 de septiembre de 2019

que explica cómo se maneja una llamada de E/S. Pero, ¿qué pasa cuando hay una llamada vinculada a la CPU? ¿Cómo se maneja?

richard-kenneth-esp3 de septiembre de 2019

Lea No bloquear el bucle de eventos.

Este es el talón de Aquiles del Nodo: un hilo errante puede hacer que el Nodo se bloquee, engomando así las obras.

Es por eso que muchos desarrolladores están cambiando de Nodo y usando herramientas como Golang, que soporta programación concurrente real de una manera relativamente fácil y conveniente.

jobecode10 de septiembre de 2019

Las nuevas versiones de nodejs están añadiendo un simple soporte “thread” que puede resolver muchos de los problemas con tareas intensivas de cpu. Se llaman hilos de trabajo. En los navegadores hay Web Workers.

https://nodejs.org/api/worker_threads.html#worker_threads_worker_threads

Continúe la discusión