¿Hay alguna alternativa de subprocesos múltiples para node.js?

Tres respuestas por el precio de una:

  • Puedes ejecutar Node.js en múltiples hilos. [1] En el mejor de los casos, la recomendación es ejecutar Node.js solo en tantos subprocesos como tenga subprocesos de hardware, pero si espera que se use algo de tiempo de CPU y desee más paralelismo, podría generar más subprocesos. Esto todavía no es ideal porque cualquier tarea que tarde más en un hilo bloqueará todas las demás respuestas en ese hilo, pero debería reducir la latencia promedio.
  • Elixir utiliza un modelo multitarea preventivo, por lo que ningún hilo robará todos los ciclos de la CPU. Sin embargo, el elixir es más lento que Node.js en aproximadamente un factor de tres en algunos casos. [2]
  • Go [3] es increíblemente rápido y tiene un excelente modelo de subprocesos. Si necesita velocidad, Go es probablemente la mejor alternativa. Go realizará el mismo tipo de subproceso al que está acostumbrado en Node, pero cualquier conexión se puede ejecutar en cualquier subproceso, por lo que una conexión ocupada no detendrá a varios otros.

Notas al pie

[1] racimo

[2] Puntos de referencia del marco TechEmpower

[3] El lenguaje de programación Go

Contrariamente a la creencia popular, Node.js es una plataforma multiproceso, solo maneja la concurrencia de manera diferente a las plataformas multiproceso tradicionales, como Java, por ejemplo.

En Node.js, todo su código se ejecuta en un hilo. Pero cuando invocas rutinas de E / S, gran parte de esa ejecución ocurrirá en diferentes hilos. Hay una tonelada de código C / C ++ que se ejecutará en subprocesos separados y, cuando termine, devolverá el control al subproceso principal de ejecución.

¿Alguna vez te has preguntado quién dispara tus devoluciones de llamada? Sí, son diferentes hilos de ejecución.

Libuv es la biblioteca que maneja E / S asíncrona y sincronizada para Node.js. Libuv usa un conjunto de hilos para manejar E / S. Entonces, cuando use cualquiera de las bibliotecas de E / S de Node.js (bibliotecas principales de Node.js), accederá a un grupo de subprocesos y utilizará varios subprocesos.