Sobes.tech
Senior

Какво е горутина? Как е устроена?

sobes.tech AI

Отговор от AI

Горутината е лек поток за изпълнение в езика Go. За разлика от системните нишки, горутините се управляват от рантайма на Go и имат много малък стек (започва с няколко килобайта и може да расте динамично). Това позволява да се стартират стотици хиляди горутини едновременно с ниски разходи.

Структура на горутината:

  • При създаване на горутина (с оператора go) планировчикът на Go я поставя в опашката с готови задачи.
  • Рантаймът на Go използва планиране M:N: M системни нишки (OS нишки) обслужват N горутини.
  • Горутините превключват контекста на ниво рантайм, което е по-бързо от превключването между системните нишки.
  • Всяка нишка (M) може да изпълнява няколко горутини (N), превключвайки между тях при блокировки или по необходимост.

Пример за създаване на горутина:

func sayHello() {
    fmt.Println("Здравей от горутината")
}

func main() {
    go sayHello() // стартираме горутина
    time.Sleep(time.Second) // чакаме, за да се изпълни горутината
}