Все вопросы

31 Конкурентность

Что такое горутина?

Горутина — это функция, которую планировщик Go выполняет одновременно с другими. Запуск пишется как go f(). Горутина дешевле потока операционной системы: рантайм сажает многие горутины на меньшее число потоков. Сама по себе она ничего не возвращает вызывающему.

main — тоже горутина. Когда она заканчивается, процесс завершается и остальные горутины обрываются. Чтобы дождаться работы, нужен канал, WaitGroup или другой явный сигнал.

Общая память без синхронизации даёт гонку. Её ищет go test -race.

Пример

Go

запуск и ожидание одной горутины

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        fmt.Println("привет из горутины")
    }()
    wg.Wait()
}