Junior
Какво са горутините?
sobes.tech AI
Отговор от AI
Леките нишки за изпълнение, управлявани от средата за изпълнение на Go. Те се създават с ключовата дума go преди извикването на функция.
Основни характеристики:
- По-малко използване на памет: Горутина започва с малък стек (обикновено 2 KB), който може да се увеличава или намалява динамично.
- По-бързо създаване: Създаването на горатина е много по-бързо, отколкото създаването на системен нишка.
- Мултиплексиране върху системни нишки: Множество горутини могат да бъдат мултиплексирани върху по-малко системни нишки от планировчика на Go.
- Кооперативно планиране: Горутините не се прекъсват принудително; те доброволно предават управлението на планировчика (например при блокиращи извиквания или явни извиквания
runtime.Gosched()).
Пример за създаване:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Здравей от горатина!")
}
func main() {
go sayHello() // Стартира sayHello като горатина
fmt.Println("Здравей от основната функция!")
time.Sleep(1 * time.Second) // За да не приключи основната функция преди горатината
}
Сравнение с нишки:
| Характеристика | Горутините на Go | Нишки на ОС |
|---|---|---|
| Управление | Среда за изпълнение на Go | Операционна система |
| Използване на паметта | Ниско, динамичен стек | Високо, фиксиран стек |
| Създаване | Бързо | Бавно |
| Планиране | Кооперативно | Предварително изпреварващо |
| Синхронизация | Канали, пакет sync | Мютекси, семафори на ОС |