根据 Understanding the node.js event loop , node.js 支持单线程模型。这意味着如果我向 node.js 服务器发出多个请求,它不会为每个请求生成一个新线程,而是会一个一个地执行每个请求。这意味着如果我在我的 node.js 代码中对第一个请求执行以下操作,同时一个新请求进入 Node ,第二个请求必须等到第一个请求完成,包括 5 秒的 sleep 时间。对吧?
var sleep = require('sleep');
sleep.sleep(5)//sleep for 5 seconds
有没有办法让 node.js 为每个请求生成一个新线程,这样第二个请求就不必等待第一个请求完成,或者我可以只在特定线程上调用 sleep?
最佳答案
如果您指的是 npm 模块 sleep ,它在自述文件中指出 sleep
将阻止执行。所以你是对的——这不是你想要的。相反,您想使用 setTimeout这是非阻塞的。这是一个例子:
setTimeout(function() {
console.log('hello world!');
}, 5000);
对于希望使用 es7 async/await 执行此操作的任何人,此示例应该会有所帮助:
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();
关于multithreading - 如何让node.js中的线程休眠而不影响其他线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13448374/