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

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

Ответ

Горутина в Go — это лёгкий поток выполнения, управляемый рантаймом Go, а не операционной системой. Горутины запускаются ключевым словом go и позволяют выполнять функции конкурентно. Они очень дёшевы: начальный размер стека всего ~2 КБ, поэтому можно запускать сотни тысяч горутин одновременно.

Пример:

func say(s string) {
    for i := 0; i < 3; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("мир")   // выполняется в отдельной горутине
    say("привет")   // выполняется в main-горутине
}

Ключевые особенности:

  • Горутины легче потоков ОС — рантайм мультиплексирует их на потоки по модели M:N
  • Переключение контекста происходит в user-space, без обращения к ядру
  • main — тоже горутина: когда она завершается, программа останавливается, не дожидаясь остальных
  • Для синхронизации используют sync.WaitGroup, для обмена данными — каналы (chan)
  • Философия Go: «Не общайтесь, разделяя память; разделяйте память, общаясь» — предпочитайте каналы общим переменным

Видео-ответы