【问题标题】:How to write code for checking if process is indeed Parallel in Node/JS如何编写代码来检查进程是否在 Node/JS 中确实是并行的
【发布时间】:2021-03-30 21:45:14
【问题描述】:

很少/很多包声称它们并行处理它们的某些方法,例如 async npm 包。对于包括 concat 在内的许多方法,他们声称它们是并行处理的。

如何编写代码来检查他们的说法是否属实?

我写了代码,但它只显示所有过程完成后的结果,所以我无法检查实际过程是如何执行的(并行或顺序)。

const async =  require('async');
const fs = require('fs');

let file1 = 'Abc1.pdf';
let file2 = 'Abc2.pdf';
let file3 = 'Abc3.pdf';

async.concat([file1,file2,file3], fs.stat, function(err, results) {
    results.forEach(element => {
        console.log('concat results: ', element.birthtime);
    });
});

---output---
concat results:  2020-12-21T02:40:35.713Z
concat results:  2020-12-21T02:40:35.668Z
concat results:  2020-12-21T02:40:35.847Z
------------

异步文档:https://caolan.github.io/async/v3/docs.html#concat

【问题讨论】:

  • 这里要明确一点,async 库本身并不能使任何东西并行运行。操作本身必须已经是异步的,才能并行运行。 async 库所做的是跟踪异步事物(一个或多个),以便您可以控制它们或知道它们何时完成。如果将长时间运行的同步循环放入函数并将其传递给async 库,它将不会并行运行。它将阻塞主 nodejs 线程并且不会与其他任何东西并行运行。
  • 如果您在async 中使用正确的可并行功能并传递本质上异步的函数,那么它将并行运行这些异步操作。仅供参考,您根本不需要异步库来执行此操作。您可以使用基于 Promise 的函数,例如 fs.promisesPromise.all() 的接口,而无需使用 async 库。
  • 你检查过某种solutions

标签: javascript node.js asynchronous npm parallel-processing


【解决方案1】:

您可以在 concat 中编写一个 10 秒的睡眠函数并打印结果,看看它是否在 10 秒内全部输出,然后它正在处理 || 否则不是。

还在节目的开始和结束时添加开始和结束时间,这将有助于您轻松识别

【讨论】:

  • 我的做法与您的建议类似,但在这种情况下时间应该超过 10 秒,并且每个任务的关闭时间应该几乎相同。
猜你喜欢
  • 2016-08-13
  • 2023-03-27
  • 2017-07-05
  • 2014-08-05
  • 1970-01-01
  • 2018-01-06
  • 2021-12-18
  • 2022-12-22
  • 1970-01-01
相关资源
最近更新 更多