Назад к статьям

Паттерны конкурентности в Go

Fan-out/fan-in, worker pools, pipelines, context cancellation — ключевые паттерны с примерами.

Конкурентность ≠ Параллелизм

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

Worker Pool

func workerPool(jobs <-chan Job, results chan<- Result, workers int) {
    var wg sync.WaitGroup
    for i := 0; i < workers; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            for job := range jobs {
                results <- process(job)
            }
        }()
    }
    wg.Wait()
    close(results)
}

Context Cancellation

Всегда передавайте context.Context. Всегда проверяйте ctx.Done(). Без этого горутины будут утекать.

Похожие статьи

Go · Architecture · API

Проектирование высоконагруженных API на Go

Разбираем архитектурные паттерны и подходы к созданию API, способного обрабатывать миллионы запросов.

Go · Clean Architecture · Best Practices

Чистая архитектура в Go: от теории к практике

Как применить принципы Clean Architecture в Go-проекте и не превратить код в Java-подобный boilerplate.