#javascript
#javascript
Вопрос:
Я работаю над некоторым кодом, и я понял, что у меня есть массив с более чем 100000 позициями, и мне нужно просмотреть все позиции массива. Однако я также понял, что могу «распараллелить for». Теперь вопрос, есть ли способ, которым я могу распараллелить значение по умолчанию для.
for(let i=0 ; i<limit ; i )
Комментарии:
1. Непонятно, о чем вы здесь просите. Javascript является однопоточным, поэтому запрос на распараллеливание чего-либо обычно невозможен (или, по крайней мере, не является тривиальным). В node вы можете создавать дочерние процессы, это то, что вы имеете в виду?
2. вы бы использовали
await
внутриasync function
3. Марк Мейер, да, это то, что я имею в виду. В качестве примера я хочу вызвать n позиций в массиве для параллельного запуска и «освобождения» основного потока. Знаете ли вы библиотеку, чтобы сделать это жизнеспособным?
Ответ №1:
Я бы сказал, вместо того, чтобы делать цикл параллельным, сделайте выполнение кода в каждом цикле параллельным. Вот функция асинхронного цикла, которая параллельно выполняет функцию обратного вызова.
/**
* @param {Array} arr: Array of items to loop over
* @param {Function} cb: Callback function which needs to be executed per item
* @returns Promise object which will be resolved once all the items have been executed
*/
function asyncFor(arr, cb) {
const asyncCB = (item) => new Promise(resolve => resolve(cb(item)));
return Promise.all(arr.map(item => asyncCB(item)));
}
Комментарии:
1. Обертывание вещей в promises не заставляет их выполняться параллельно. Ваши обратные вызовы по-прежнему будут выполняться по одному за раз.
Ответ №2:
Что-то вроде параллельного потока в java8 ? Создайте пул рабочих, перенаправьте вызовы другому рабочему, соберите результаты и продолжайте..