Вопрос проверяет понимание управления параллельными асинхронными операциями в JavaScript, что важно для оптимизации производительности и предотвращения перегрузки ресурсов.
Когда нужно выполнить много асинхронных операций (например, запросы к API), запуск всех одновременно может перегрузить сеть или сервер. Для контроля используют механизм ограничения параллельности (concurrency limit).
Создаётся очередь задач и пул из N одновременно выполняемых промисов. Когда один промис завершается, из очереди берётся следующий. Это похоже на работу thread pool в других языках.
async function asyncPool(limit, tasks) {
const results = [];
const executing = new Set();
for (const task of tasks) {
const p = Promise.resolve().then(() => task());
results.push(p);
executing.add(p);
const clean = () => executing.delete(p);
p.then(clean, clean);
if (executing.size >= limit) {
await Promise.race(executing);
}
}
return Promise.all(results);
}
// Использование
const tasks = [1,2,3,4,5].map(i => () => fetch(`/api/${i}`));
await asyncPool(2, tasks);Вывод: Ограничение параллельности — важный паттерн для стабильности и производительности приложений, особенно при работе с внешними ресурсами или ограниченными системами.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Python Developer в телеграм