piscina nodejs woker 线程池实现
nodejs 线程池工具还是很多的,piscina 是一个比较活跃的项目
包含的特性
- 快速
- 包含了固定以及可变任务场景
- 支持灵活的线程池大小
- 异步追踪支持
- 取消支持
- 支持comonj,esm,以及ts
- 自定义任务队列
- linux 系统上可选的cpu 调度支持
参考使用
- app.js
const path = require('path');
const Piscina = require('piscina');
const piscina = new Piscina({
filename: path.resolve(__dirname, 'worker.js')
});
(async function() {
const result = await piscina.run({ a: 4, b: 6 });
console.log(result); // Prints 10
// 通过代码加载文件
const resultv2 = await piscina.run({ a: 4, b: 100 },{filename: path.resolve(__dirname, 'as.js')});
console.log(resultv2); // Prints 10
})();
- woker.js
module.exports = ({ a, b }) => {
return a + b;
};
- as.js
const { setTimeout } = require('timers/promises');
module.exports = async ({ a, b }) => {
// Fake some async activity
await setTimeout(1000);
return a + b;
};
- 多方法支持
注意参数传递应该是一个对象
比如rong.js
function add({ a, b }) { return a + b; }
function multiply({ a, b }) { return a * b; }
module.exports = {
add,
multiply
};
说明
tinypool 是一个fork自piscina 的一个项目,移除了一些不需要的功能
参考资料
https://www.npmjs.com/package/tinypool
https://github.com/poolifier/poolifier
https://github.com/piscinajs/piscina
https://www.npmjs.com/package/worktank