Javascript 使用辅助线程处理多维数组

Javascript 使用辅助线程处理多维数组,javascript,node.js,multithreading,worker-thread,Javascript,Node.js,Multithreading,Worker Thread,我有一个有趣的任务,但我甚至对学习工作者感到困惑。有一个10-30K对象的维度数组。我想在可用流的数量和每个子阵列中将其分解为子阵列,以实现在特定字段中搜索所需对象的功能 关于将阵列划分为子阵列的问题以及搜索函数的实现,一切都很好。但是,如何在每个子阵列中同时在工作人员的帮助下开始搜索,存在一些问题( 我刚开始了解工人们,并没有完全了解他们的一切。如果能得到帮助或建议,我将不胜感激 另外,在执行代码时,我得到一个错误 function evalInWorker(f){ if (isMai

我有一个有趣的任务,但我甚至对学习工作者感到困惑。有一个10-30K对象的维度数组。我想在可用流的数量和每个子阵列中将其分解为子阵列,以实现在特定字段中搜索所需对象的功能

关于将阵列划分为子阵列的问题以及搜索函数的实现,一切都很好。但是,如何在每个子阵列中同时在工作人员的帮助下开始搜索,存在一些问题(

我刚开始了解工人们,并没有完全了解他们的一切。如果能得到帮助或建议,我将不胜感激

另外,在执行代码时,我得到一个错误

function evalInWorker(f){
    if (isMainThread){
        return new Promise((res, rej) =>{
            const worker = new Worker(__filename, {eval: true});
            worker.on('error', e => rej(e));
            worker.on('message', msg => {
                res(msg);
            });
            worker.on('exit', code => {
                if(code !== 0)
                    rej(new Error(`Worker stopped with exit code ${code}`));
            });
        });
    }else {
        parentPort.postMessage(f());
    }
}
//getSlicedArr возвращает массив с подмассивами, search - ищет в подмассиве объект по нужным свойствам needToFind
const tasks = (threads, dataArr, needToFind, arr = \[\]) => {
    getSlicedArr(dataArr, threads).map( e => arr.push(evalInWorker(search(e, needToFind))));
    return arr;
};

Promise.all(tasks(subArrSize, dataArr, needToFind))
    .then(messList => {
        messList.forEach(m => console.log(m))
    })
    .catch(e => console.log(e));

出于这种目的,您可以看看专门为这种东西构建的lib

下面是一个与您的上下文相关的示例(它使用Typescript,但与JS相同:

import { start, stop, job } from 'microjob';

const main = async () => {
  await start();

  // build an array of 5 arrays filled with random numbers
  const table = Array.from({ length: 5 }).map(_ => Array.from({ length: 100 }).map(Math.random));

  // this is your search function (just a placeholder here)
  const search = (arr: number[]): number => {
    console.log(arr);

    return arr[0];
  };

  // job executes the search function inside a new thread
  // so the executions are made in parallel
  const res = await Promise.all(table.map(data => job(search, { data })));
  console.log(res);

  await stop();
};

main();