multithreading - 如何让node.js中的线程休眠而不影响其他线程?

标签 multithreading node.js asynchronous

根据 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/

相关文章:

multithreading - Common Lisp 中的WITH-OUTPUT-TO-STRING 与多线程

javascript - 从 $.getJSON 调用外部对象

node.js - 在 Node 中使用 libsodium.crypto_pwhash (Argon2)

c# - 等待所有线程完成的有用模式是什么?

javascript - 在固定工作日运行的 Node-cron 作业

javascript - Node Js & Puppeteer - 如何选择包裹在 anchor 标签内的文本

ios - 如何返回由一堆异步 HTTP 请求组合而成的对象数组?

c# - 由于网络不良导致 WCF 异步方法失败

c# - 如何终止挂起的 APM 操作

ios - 核心数据 在后台导入数据并回滚