advanced

Async bottlenecks

Находите promise waterfalls, serial loops, неограниченный concurrency, блокировку event loop и медленных consumers очередей.

Async bottlenecks в Node.js — от неправильного non-blocking API: promise waterfalls, serial `for` с await, неограниченный concurrency, блокировка event loop sync crypto/JSON или медленные consumers на streams/очередях.

					// Плохо: serial awaits
for (const id of ids) await fetchOne(id);

// Лучше: bounded concurrency
await mapPool(ids, 10, (id) => fetchOne(id));
				

| Запах | Фикс | |-------|------| | Promise waterfall | Параллелить независимые шаги | | Неограниченный `Promise.all` | Semaphore / лимит pool | | Sync `fs.readFileSync` | Async API или worker threads | | Нет backpressure | Pause streams при полном buffer |

Используйте `performance.eventLoopUtilization` и APM для event-loop stall. CPU-heavy — в worker threads или отдельные сервисы.

На интервью: лимиты concurrency; parallel vs serial async; почему `setImmediate` не лечит CPU blocking; lag consumer очереди.

Типовые ошибки: `await` в tight loops; mix sync/async file API; игнор 429/503 как сигналов backpressure.

Компромисс — простой последовательный код против throughput и fairness под нагрузкой.

Чеклист:

  • Ограничивайте parallel async work.
  • Event loop без sync CPU spikes.
  • Timeouts и cancellation.
  • Lag consumers на очередях.