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