piscina nodejs woker 线程池实现
  8KhYbgszLLmZ 2023年11月30日 38 0

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
};
const Piscina = require('piscina');

说明

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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月30日 0

暂无评论

推荐阅读
  anLrwkgbyYZS   2023年12月30日   28   0   0 i++iosi++ioscici
  anLrwkgbyYZS   2023年12月30日   33   0   0 ideciciMaxideMax
8KhYbgszLLmZ