Перейти к содержимому
10 / 15

Паттерны конкурентности: пул воркеров, fan-in, fan-out, конвейер

Три паттерна закрывают большинство задач. Пул воркеров: фиксированное число горутин читает из общего канала задач — так ограничивается параллелизм и потребление ресурсов, а число воркеров подбирается под характер работы (для процессорной — около числа ядер, для сетевой — заметно больше). Fan-out и fan-in: одна задача раздаётся нескольким обработчикам, результаты сливаются в один канал; ключевая деталь слияния — закрыть выходной канал ровно один раз, когда завершились все источники, для чего берут WaitGroup и отдельную горутину-закрывателя. Конвейер: цепочка стадий, каждая читает из входного канала и пишет в выходной, а каждая стадия сама закрывает свой выход через defer close. Общее для всех трёх и главное на собеседовании — завершение: каждая стадия обязана реагировать на отмену контекста, иначе при раннем выходе потребителя отправители зависнут навсегда и превратятся в утечку.