У меня есть интересное задание, но я даже запутался в обучении рабочих. Существует массив измерений 10-30К объектов. Я хочу разбить его на подмассивы по количеству доступных потоков и в каждом подмассиве реализовать функцию поиска нужного объекта в определенных полях.
С вопросом о разбиении массива на подмассивы и реализации функция поиска - все хорошо. Но как начать поиск с помощью работников одновременно в каждом подмассиве - есть проблемы (
Я только начал знакомиться с рабочими и не до конца все понял. Буду благодарен за помощь или совет.
PS При выполнении кода я получаю ошибку
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));