有一个nodejs模块可以限制并发承诺的数量:
https://github.com/sindresorhus/p-queue
这是否使用了多个线程?
来自官方页面的示例:
const {default: PQueue} = require('p-queue');
const got = require('got');
const queue = new PQueue({concurrency: os.cpus().length});
(async () => {
await queue.add(() => got('sindresorhus.com'));
console.log('Done: sindresorhus.com');
})();
(async () => {
await queue.add(() => got('ava.li'));
console.log('Done: ava.li');
})();
(async () => {
const task = await getUnicornTask();
await queue.add(task);
console.log('Done: Unicorn task');
})();
它会在不同的cpu线程中运行上面的每个异步函数吗?
它会在不同的cpu线程中运行上面的每个异步函数吗?
不,当然不是。async function
并不是这么做的。它们所做的只是为顺序异步代码提供更好的语法。它们仍然是带有promise回调的普通promise,一如既往地在同一个单线程事件循环上运行。另请参阅promise.all在javascript在单个线程中执行的情况下有用吗?
当然,got
包可以自由使用nodejs的工作线程功能或其他功能来完成它的工作,它只需要返回一个promise就可以很好地使用await
。但这不会影响异步IIFE或调度函数的p-queue
。