1.0.1 • Published 3 years ago

cwg-mr v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
3 years ago

简易map-reduce封装

  1. 因为js没有支持goroutine这种轻量级线程,所以cpu密集型计算会导致主进程卡死

  2. 本库使用worker_threads模块,在调用方法时启动一个子进程池,对较大的任务数组均匀分组,依次交给子进程池里的进程来完成运算任务,从而提高cpu利用效率,可以减少响应时间

方法说明

  1. async function runGroupMapReduce(dataArr, context, groupSize, funcMap, funcReduce);

  • dataArr:任务数组的数据

  • context:运行funcMap时的上下文变量或者方法,这是一个key-value对象,value如果是function则会被转换成字符串,其他类型的value必须是可序列化的类型,否则报错

  • groupSize:交给单个子进程的数据条数,例如dataArr长度为1e5,groupSize为2e3,则作除法后向上取整结果为50,最终会向所有子进程总共调用50次运算

  • funcMap:这是一个回调函数,入参为从dataArr截取出来的新数组,运行上下文环境是与当前调用者的上下文分开的,如果需要让funcMap调用当前上下文的变量或者方法,必须通过context参数传入

  • funcReduce:这是一个回调函数,入参为一个数组,数组元素为每次子进程的响应结果,返回值为runGroupMapReduce方法的最终结果

  1. function parseContext(context);

  • 这个方法把context转换成WCONTEXT
  1. async function runInWorker(WDATA, WFUNC, WCONTEXT);

  • 把耗时的运算代码交给子进程运行,返回值为运算结果

使用示例:

见test.js