Вопрос проверяет понимание различий между worker pool и семафором.
Семафор ограничивает количество параллельных задач, но порядок выполнения не контролируется. Worker pool — фиксированное число рабочих, обрабатывающих задачи из очереди, что упрощает контроль очередности и управления задачами.
Семафор:
Используется для ограничения числа одновременных операций.
Не контролирует порядок выполнения задач.
Прост в реализации (1 канал).
Worker Pool:
Состоит из фиксированного числа воркеров (горутин), слушающих общую очередь задач.
Даёт более строгий контроль:
Чёткое завершение всех задач.
Возможность учитывать контекст отмены.
Позволяет возвращать результат в том же порядке, что и поступление.
Пример Worker Pool:
tasks := make(chan Task)
results := make(chan Result)
for i := 0; i < numWorkers; i++ {
go func() {
for task := range tasks {
results <- process(task)
}
}()
}Когда использовать:
Семафор — когда нужно просто ограничить количество операций (например, запросов).
Worker Pool — когда требуется контролировать поток задач, результаты или повторно использовать воркеров.