nodejs 下并行执行任务,详见:一篇文章了解 JS 并行任务
安装
npm i qiao-parallel
使用
// cjs
const { parallelByIIFE, parallelByFork, parallelByWorker } = require('qiao-parallel');
// mjs
import { parallelByIIFE, parallelByFork, parallelByWorker } from 'qiao-parallel';
示例代码
并行任务池
module.exports = [100, 300, 200, 400];
单个任务完成回调
// q
const q = require('qiao-console');
/**
* callback
* @param {*} index
* @param {*} res
*/
module.exports = function (index, res) {
q.writeLine(index, `${index} ${res}`);
};
所有任务完成回调
// q
const q = require('qiao-console');
/**
* complete
* @param {*} l
*/
module.exports = function (l) {
q.writeLine(l, 'complete');
};
模拟任务代码
/**
* handler
* @param {*} timeout
* @returns
*/
module.exports = function (timeout) {
return new Promise(function (resolve) {
setTimeout(() => {
return resolve(timeout);
}, timeout);
});
};
模拟任务代码-fork 模式
// handler
const handler = require('./_handler.js');
// fork handler
async function forkHandler() {
// check
if (!process || !process.argv) return;
// value
const value = parseInt(process.argv[2]);
// msg
const msg = await handler(value);
process.send(msg);
}
forkHandler();
// q
const q = require('qiao-console');
// vars
const values = require('./_values.js');
const handler = require('./_handler.js');
const callback = require('./_callback.js');
const complete = require('./_complete.js');
// parallel
const parallel = require('../index.js');
// test
(function () {
q.clear();
parallel.parallelByIIFE(handler, values, callback, complete);
})();
// q
const q = require('qiao-console');
// vars
const values = require('./_values.js');
const callback = require('./_callback.js');
const complete = require('./_complete.js');
// parallel
const parallel = require('../index.js');
// test
(function () {
q.clear();
const jsPath = require('path').resolve(__dirname, './fork-handler.js');
parallel.parallelByFork(jsPath, values, callback, complete);
})();
// q
const q = require('qiao-console');
// vars
const values = require('./_values.js');
const callback = require('./_callback.js');
const complete = require('./_complete.js');
// parallel
const parallel = require('../index.js');
// test
(function () {
q.clear();
const jsPath = require('path').resolve(__dirname, './worker-handler.js');
parallel.parallelByWorker(jsPath, values, callback, complete);
})();