¿Cómo el servidor node.js atiende la siguiente solicitud, si la solicitud actual tiene un cálculo enorme?

Supongamos que estoy usando un servidor de nodos y hay una API que está generando una serie de 1 a 1 millón (es decir, una operación de CPU muy grande), por lo que en este caso, otra solicitud que llega al servidor está en cola (y hay que esperar mucho su turno). esto mata la experiencia del usuario) porque el nodo es un solo hilo.

¿Hay alguna otra solución que podamos hacer con node.js para no esperar las otras solicitudes de su turno tanto tiempo?

2 Solutions collect form web for “¿Cómo el servidor node.js atiende la siguiente solicitud, si la solicitud actual tiene un cálculo enorme?”

¿Cómo el servidor node.js atiende la siguiente solicitud, si la solicitud actual tiene un cálculo enorme?

No es así , si ese cálculo ocurre en el hilo principal y no se divide en partes más pequeñas.

Para tener la posibilidad de atender otras solicitudes durante una tarea que requiere un uso intensivo de la CPU, debe:

  1. divida su computación en partes y use setImmediate o process.nextTick para ejecutarlas
  2. use un proceso externo para esa tarea y llámelo como cualquier otro progtwig o servicio externo utilizando HTTP, TCP, IPC o el proceso de generación de procesos secundarios, o utilizando un sistema de colas, pub / sub, etc.
  3. escribe un complemento nativo en C ++ y usa hilos para eso

Lo importante es que necesita que la stack se desenrolle a menudo en su subproceso V8 para que el bucle de eventos tenga la posibilidad de manejar los eventos con la mayor frecuencia posible. Y tenga en cuenta que cuando tenga un cálculo prolongado que demore 10 segundos y lo divida en 1000 partes más pequeñas, su servidor seguirá sin poder atender nuevas solicitudes o cualquier otra E / S o evento 1000 veces durante 10ms cada vez. .

Si tiene una gran cantidad de operaciones con gran cantidad de CPU, le recomendaría encarecidamente que las elimine de su proceso para atender las solicitudes, no solo porque bloquea el bucle de eventos sino también porque, en tal caso, desea utilizar todos sus núcleos en al mismo tiempo, por lo que sería óptimo tener tantos procesos (o subprocesos) realizando el trabajo pesado de la CPU como los núcleos de la CPU (o posiblemente más con el subproceso) y tener todas las operaciones vinculadas a E / S en un proceso separado que no procesa las operaciones pesadas de la CPU por sí mismo.

Un solo hilo no significa que los procesos serán progtwigdos por First Come First Serve. En serio, no creo que las solicitudes múltiples se procesen al estilo First Come First Serve, por lo que esto no será un gran problema. Sin embargo, el sistema en general se ralentizará debido a las solicitudes que tardan demasiado en procesarse.

Y para eso, el nodo tiene una solución:

https://nodejs.org/api/cluster.html

Lo que esto hace es que, básicamente, puede generar múltiples instancias de su aplicación, todas ejecutándose en el mismo puerto, por lo que si tiene varias solicitudes, una fracción muy pequeña de las cuales está tomando demasiado tiempo, entonces los otros procesos secundarios del clúster pueden responder. a las posteriores peticiones.

  • ¿Por qué mi function eliminada no es typeof "undefined" en Node.js?
  • La forma correcta de hacer un esquema de mongoose para un número dynamic de pares key / valor
  • typeerror: app.use () requiere una function de middleware
  • La callback de Account.createUser no funciona en meteorjs
  • ¿Cómo mezclar Node.js y Typescript en el mismo proyecto de Visual Studio?
  • ¿Cómo se elimina por completo la installation de Ionic y cordova desde mac?
  • scope variable de la class javascript en la function de callback
  • Cargar files con Websockets y Nodejs
  • ExpressJs - donde express.static (__ dirname) apunta a?
  • Error Strange node.js: TypeError: Object # <Object> no tiene el método 'on'
  • El server de eco de nodo degrada 10x cuando se utilizan conductos de flujo sobre almacenamiento en búfer
  • Nodo JS reinicia automáticamente todo el process de JS cuando el server falla / falla
  • Protables en nodeJS / a callback dentro de una promise / order de ejecuciones no es correcto
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.