【问题标题】:Does p-queue use multiple threads?p-queue 是否使用多个线程?
【发布时间】:2019-11-16 19:42:17
【问题描述】:

有一个 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 线程中运行上述每个异步函数吗?

【问题讨论】:

  • 只是好奇——什么时候可以在 JavaScript 中进行多线程?
  • idk.. 我正在尝试找到一种使用多线程的方法,但到目前为止我发现的所有内容都需要进程之间的某种通信。似乎没有办法从同一个脚本轻松地做到这一点,因为有共享变量等等......快到 2020 年了,cpus 有大约 20 个核心,我们仍然不能全部使用它们
  • 我建议在这里阅读异步和线程之间的区别:stackoverflow.com/questions/34680985/…
  • @Alex "我正在尝试找到一种使用多线程的方法" - 为什么?你的目标是什么?
  • 让我的应用使用所有 cpu 核心

标签: javascript node.js multithreading promise


【解决方案1】:

它会在不同的 cpu 线程中运行上述每个异步函数吗?

不,当然不是。这不是async functions 所做的。他们所做的只是为顺序异步代码提供更好的语法。他们仍然是normal promises,在后台运行承诺回调,在same single-threaded event loop as always 上运行。另见Is promise.all useful given that javascript is executed in a single thread?

当然,got 包可以免费使用 nodejs 的工作线程功能或其他东西来完成它的工作,它需要做的就是返回一个承诺。但这不会影响您的异步 IIFE 或计划函数的 p-queue

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多