Sobes.tech
Junior — Middle

Как се свързва изпълнението на горутината с процесорните нишки и как се назначава на конкретна нишка?

sobes.tech AI

Отговор от AI

В Go, горутините са леки нишки, управлявани от средата за изпълнение на Go, а не директно от операционната система. Те се изпълняват вътре в нишки на ОС, но Go използва собствен планировчик, който разпределя много горутини върху ограничен брой нишки (M — нишки на ОС).

Назначаването на горутина към нишка става чрез модел M:N, където M е броят на нишките на ОС, а N е броят на горутините. Планировчикът на Go динамично превключва изпълнението на горутините между нишките, за да използва ефективно ресурсите на процесора.

По този начин, горутината не е свързана с конкретна процесорна нишка, а планировчикът на Go решава на коя нишка и кога ще бъде изпълнена. Това позволява да се стартират хиляди горутини с минимални разходи в сравнение с нишките на ОС.

Пример:

func main() {
    go func() {
        fmt.Println("Горутината работи")
    }()
    time.Sleep(time.Second)
}

Тук горутината се стартира, а планировчикът на Go ще й назначи изпълнение на една от наличните нишки на ОС.