Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: async, concurrency, promise, throttle, queue

Как ограничивать количество параллельных async-задач?

Вопрос проверяет понимание управления параллельными асинхронными операциями в JavaScript, что важно для оптимизации производительности и предотвращения перегрузки ресурсов.

Короткий ответ

Для ограничения параллельных async-задач используют пул промисов или библиотеки типа p-limit. Создаётся очередь задач и запускается ограниченное количество одновременно. Когда одна задача завершается, запускается следующая из очереди. Это предотвращает перегрузку системы и контролирует использование ресурсов.

Длинный ответ

Ограничение параллельных async-задач

Когда нужно выполнить много асинхронных операций (например, запросы к 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);

Где применяется

  • Загрузка множества файлов
  • Пакетные запросы к API с rate limiting
  • Обработка данных в потоках

Вывод: Ограничение параллельности — важный паттерн для стабильности и производительности приложений, особенно при работе с внешними ресурсами или ограниченными системами.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#async

#concurrency

#promise

#throttle

#queue

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.