piscina nodejs woker 线程池实现

发布时间 2023-11-22 17:22:39作者: 荣锋亮

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