Проверяет понимание работы с каналами и шаблонов конкурентности.
Fan-out — распределение задач между несколькими воркерами.
Fan-in — объединение результатов из нескольких горутин в один канал.
Используются для параллелизации обработки и агрегации результатов.
Fan-out:
одна входящая очередь задач
множество воркеров читают задачи параллельно
каждый воркер выполняет обработку
for i := 0; i < workers; i++ {
go func() {
for job := range jobs {
results <- process(job)
}
}()
}Fan-in:
несколько источников результатов
один объединяющий канал
агрегатор читает все результаты
go func() {
wg.Wait()
close(results)
}()Преимущества:
равномерная загрузка CPU
ускорение тяжёлых операций
контролируемый параллелизм
Используется в:
обработке HTTP задач
парсинге файлов
массовых запросах к БД/API