
Патерни конкурентності
Worker pools, pipelines, fan-out/fan-in, скасування, context, errgroup, семафори
1Що таке worker pool у Go?
Що таке worker pool у Go?
Відповідь
Worker pool — це патерн конкурентності, що використовує фіксовану кількість goroutine (worker) для обробки задач зі спільного каналу. Цей патерн дозволяє обмежити кількість активних goroutine і контролювати споживання системних ресурсів. На відміну від створення однієї goroutine на задачу, worker pool повторно використовує набір worker для ефективної обробки великого обсягу задач.
2Яка головна перевага використання worker pool замість створення однієї goroutine на задачу?
Яка головна перевага використання worker pool замість створення однієї goroutine на задачу?
Відповідь
Обмеження кількості активних goroutine дозволяє контролювати споживання системних ресурсів (пам'яті та CPU) і уникати перевантаження. Створення однієї goroutine на задачу може призвести до тисяч або мільйонів одночасних goroutine, насичуючи scheduler і вичерпуючи пам'ять. Worker pool підтримує оптимальну кількість worker, які обробляють задачі послідовно, забезпечуючи передбачувану продуктивність навіть за високого навантаження.
3Що таке pipeline у контексті конкурентності в Go?
Що таке pipeline у контексті конкурентності в Go?
Відповідь
Pipeline — це послідовність етапів (stage), з'єднаних каналами, де кожен етап є групою goroutine, що виконують одну й ту саму функцію. Кожен етап отримує дані через вхідні канали, виконує обробку, а потім надсилає результати через вихідні канали. Цей патерн дозволяє розкласти складну обробку на прості та повторно використовувані етапи, полегшуючи композицію та тестування кожного компонента незалежно.
Як правильно закрити канал у worker pool, щоб сигналізувати про завершення обробки?
Яка різниця між fan-out і fan-in?
+21 питань зі співбесід
Інші теми співбесід Go
Основи Go
Структури даних Go
Інтерфейси Go
Обробка помилок
Основи goroutines
Channels
Go Modules
HTTP-сервер
HTTP-клієнт
Кодування JSON
Database/SQL
Пакет context
Testing
Примітиви синхронізації
Веб-фреймворки Go
Проєктування REST API
gRPC
Reflection
Керування пам'яттю
Оптимізація продуктивності
Generics
Go Design Patterns
Microservices
Безпека та автентифікація
Docker & Containerization
Kubernetes Basics
Просунутий Go
Розробка CLI
Опануй Go для наступної співбесіди
Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.
Почни безкоштовно