Обработка многомерного массива с помощью worker_threads
Всем привет. Имею интересную задачу, но я чет запутался в изучении воркеров. Есть массив размерностью в 10-30К объектов. Я хочу разбить его на подмассивы в количестве доступных потоков и в каждом подмассиве осуществить функцию поиска нужного объекта по определенным полям.
С вопросом разбиения массива на подмассивы и реализацией функции поиска - все хорошо. Но как с помощью воркеров запустить поиск одновременно в каждом подмассиве - есть траблы(
Я только начал знакомиться с воркерами и не до конца все понял. Буду благодарен за помощь либо совет.
P.S. Выполняя код получаю ошибку
//НАЧАЛО РАБОТЫ С ПОТОКАМИ
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));
