Приведи примеры задач, где лучше использовать асинхронность

«Приведи примеры задач, где лучше использовать асинхронность» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Обработка HTTP-запросов - горутины позволяют обрабатывать множество запросов параллельно без блокировки основного потока:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    go processRequest(r) // Асинхронная обработка
    w.Write([]byte("OK"))
})
  1. Параллельные вычисления - распараллеливание CPU-bound задач:
results := make(chan int)
go calculatePart(data[:n/2], results)
go calculatePart(data[n/2:], results)
res1, res2 := <-results, <-results
  1. Чтение/запись в несколько источников - одновременная работа с разными БД, файлами или сетевыми ресурсами:
var wg sync.WaitGroup
wg.Add(2)
go func() { defer wg.Done(); readFromDB1() }()
go func() { defer wg.Done(); readFromDB2() }()
wg.Wait()
  1. Таймеры и долгие операции - выполнение фоновых задач без блокировки UI/API:
go func() {
    time.Sleep(5 * time.Minute)
    cleanupCache()
}()