# cwg-mr

> simple map-reduce functions

Latest version **1.0.1** (published 2021-11-02) · ISC license · 0 weekly downloads

## Install

```sh
npm install cwg-mr
pnpm add cwg-mr
yarn add cwg-mr
bun add cwg-mr
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2021-11-02 |
| First published | 2021-11-02 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 5.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | 1696292264@qq.com |
| Maintainers | treemonster1993 |

## Links

- npm: https://www.npmjs.com/package/cwg-mr
- npm.io page: https://npm.io/package/cwg-mr

## Recent versions

- 1.0.1 (latest) — 2021-11-02
- 1.0.0 — 2021-11-02

## README

### 简易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方法的最终结果

2. #### function parseContext(context);

  - 这个方法把context转换成WCONTEXT

3. #### async function runInWorker(WDATA, WFUNC, WCONTEXT);

  - 把耗时的运算代码交给子进程运行，返回值为运算结果

### 使用示例：

见test.js

---
_Source: https://npm.io/package/cwg-mr · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
