Junior
Czym są goroutines?
sobes.tech AI
Odpowiedź od AI
Lekki wątki wykonawcze, zarządzane przez środowisko wykonawcze Go. Tworzone są za pomocą słowa kluczowego go przed wywołaniem funkcji.
Główne cechy:
- Mniejsze zużycie pamięci: Gorutyna zaczyna z małym rozmiarem stosu (zwykle 2 KB), który może się dynamicznie powiększać lub zmniejszać.
- Szybsze tworzenie: Tworzenie gorutyny jest znacznie szybsze niż tworzenie wątku systemowego.
- Multipleksowanie na wątki systemowe: Wiele gorutyn może być multipleksowanych na mniejszą liczbę wątków systemowych przez planistę Go.
- Planowanie kooperatywne: Gorutyny nie są przerywane preemptively; dobrowolnie oddają kontrolę planistowi (np. podczas wywołań blokujących lub jawnych wywołań
runtime.Gosched()).
Przykład tworzenia:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Cześć z gorutyny!")
}
func main() {
go sayHello() // Uruchamia sayHello jako gorutynę
fmt.Println("Cześć z funkcji głównej!")
time.Sleep(1 * time.Second) // Aby funkcja główna nie zakończyła się wcześniej niż gorutyna
}
Porównanie z wątkami:
| Cecha | Gorutyny Go | Wątki systemowe |
|---|---|---|
| Zarządzanie | Środowisko wykonawcze Go | System operacyjny |
| Zużycie pamięci | Niskie, dynamiczny stos | Wysokie, stały stos |
| Tworzenie | Szybkie | Wolne |
| Planowanie | Kooperatywne | Preemptive |
| Synchronizacja | Kanały, pakiet sync | Muteksy, semafory systemowe |