Cómo funciona REALMENTE el bucle de eventos de nodo:o por qué la mayoría de los diagramas de bucle de eventos son INCORRECTOS

Cuando Bert presentó su discurso de apertura en Node Interactive Europe 2016 sobre Event Loop, comenzó diciendo que la mayoría de los diagramas de bucles de eventos están INCORRECTOS. Soy culpable de usar uno de ellos en mis charlas. :)

Eso es todo. En él, el bucle de eventos devuelve los datos a los clientes como pan caliente.

Su diagrama está más cerca de las cosas reales. En él, el ciclo de eventos comienza, funciona y luego se cierra eventualmente (juego de palabras).

Así que hay algunos pasos importantes:

  1. inicias un script:node index.js
  2. setTimeout() y setInterval() patear
  3. Tiene algo de código ejecutándose
  4. Función Unicornio (más sobre esto más adelante)
  5. Más código
  6. setImmediate() que no es realmente inmediato
  7. Código
  8. Limpiar con eventos de cierre
  9. Último código
  10. salir del proceso si no hay refs o vuelve a 2 si tienes refs

Refs es un contador simple que aumenta cuando hay una devolución de llamada asíncrona para ejecutar y disminuye cuando finalmente se ejecuta. Cuando se trabaja con devoluciones de llamada de transmisión (como en los datos), solo hay un incremento de referencia.

Cada uno de los bloques de código JS tiene su propio process.nextTick() :

Sí. nextTick() debería ser realmente inmediato y setImmediate() debería ser el próximo tick. Argh. Solo recuérdalos como opuestos. En otras palabras, si todo lo que tienes es un montón de nextTick() devoluciones de llamada, su código se ejecutará en ese bloque JS y nunca irá al siguiente ciclo de bucle de eventos (pasos 2 a 9).

Finalmente, está la función de unicornio. Es como un comunicador entre Node y OS. Verá, el sistema operativo y sus procesos son asíncronos pero parecen síncronos. Este unicornio aprovecha la naturaleza asíncrona y la aprovecha para el ciclo de eventos de Node. Además, los unicornios son geniales:

Por cierto, a pesar de lo que muestran los diagramas, el grupo de subprocesos no realiza solicitudes de red ni realiza trabajos TCP de sockets. Esto último sucede en Kernel.

¿Volteo de mesa? Exactamente. Pero lo bueno de Node es que para la mayoría de las cosas, como construir un servidor Express o ejecutar una tarea Gulp, ¡no necesita saber cómo funciona realmente el bucle de eventos!

Muchas gracias a Berto. Esta fue una de mis charlas favoritas en Node Interactive EU 2016. Ahora voy a volver a dibujar mi diagrama para ilustrar más apropiadamente cómo funciona realmente el bucle de eventos en Node. :) ¿Qué tal este?