thread parallel one nodejs node multithreaded child multithreading node.js asynchronous

multithreading - parallel - nodejs process send



¿Cómo dormir el hilo en node.js sin afectar otros hilos? (3)

Según Understanding node.js event loop , node.js admite un único modelo de hilo. Eso significa que si realizo varias solicitudes a un servidor node.js, no generará un nuevo hilo para cada solicitud, sino que ejecutará cada solicitud una por una. Significa que si hago lo siguiente para la primera solicitud en mi código node.js, y mientras tanto, ingresa una nueva solicitud en el nodo, la segunda solicitud debe esperar hasta que se complete la primera solicitud, incluyendo 5 segundos de espera. ¿Derecha?

var sleep = require(''sleep''); sleep.sleep(5)//sleep for 5 seconds

¿Existe alguna forma de que node.js pueda engendrar un nuevo hilo para cada solicitud, de modo que la segunda solicitud no tenga que esperar a que se complete la primera solicitud, o puedo invocar el modo de espera únicamente en un hilo específico?


Considere el módulo deasync , personalmente no me gusta la forma Promesa de hacer que todas las funciones sean asincrónicas, y la palabra clave async / await anythere. Y creo que el node.js oficial debería considerar exponer la API de bucle de evento, esto resolverá simplemente el infierno de devolución de llamada. Node.js es un framework, no un lenguaje.

var node = require("deasync"); node.loop = node.runLoopOnce; var done = 0; // async call here db.query("select * from ticket", (error, results, fields)=>{ done = 1; }); while (!done) node.loop(); // Now, here you go


En caso de que tenga un ciclo con una solicitud asíncrona en cada uno y desee un cierto tiempo entre cada solicitud, puede usar este código:

var startTimeout = function(timeout, i){ setTimeout(function() { myAsyncFunc(i).then(function(data){ console.log(data); }) }, timeout); } var myFunc = function(){ timeout = 0; i = 0; while(i < 10){ // By calling a function, the i-value is going to be 1.. 10 and not always 10 startTimeout(timeout, i); // Increase timeout by 1 sec after each call timeout += 1000; i++; } }

Este ejemplo espera 1 segundo después de cada solicitud antes de enviar el siguiente.


Si se refiere al módulo sleep npm, observa en el archivo léame que sleep bloqueará la ejecución. Entonces tienes razón, no es lo que quieres. En su lugar, desea utilizar setTimeout que no sea de bloqueo. Aquí hay un ejemplo:

setTimeout(function() { console.log(''hello world!''); }, 5000);

Para cualquiera que quiera hacer esto usando es7 async / await, este ejemplo debería ayudar:

const snooze = ms => new Promise(resolve => setTimeout(resolve, ms)); const example = async () => { console.log(''About to snooze without halting the event loop...''); await snooze(1000); console.log(''done!''); }; example();