p-queue是否使用多个线程



有一个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

最新更新