Junior
Kas yra gorutinos?
sobes.tech AI
Atsakymas iš AI
Lengvos vykdymo srautus, kuriuos valdo Go vykdymo aplinka. Jie kuriami naudojant raktinį žodį go prieš funkcijos kvietimą.
Pagrindinės savybės:
- Mažesnis atminties suvartojimas: Gorutina pradeda su mažu steku (paprastai 2 KB), kuris gali būti dinamiškai didinamas arba mažinamas.
- Greitesnis kūrimas: Gorutinos kūrimas yra daug greitesnis nei sisteminio srauto kūrimas.
- Multiplexingas sisteminiuose srautuose: Daugelis gorutinų gali būti multiplexuojamos į mažesnį sisteminių srautų skaičių Go planuotojo.
- Kooperatyvinis planavimas: Gorutinos nėra iš anksto nutraukiamos; jos savanoriškai perduoda kontrolę planuotojui (pavyzdžiui, blokuojančiuose iškvietimuose arba aiškiuose
runtime.Gosched()iškvietimuose).
Kūrimo pavyzdys:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Sveiki iš gorutinų!")
}
func main() {
go sayHello() // Paleisti kaip gorutiną
fmt.Println("Sveiki iš pagrindinės funkcijos!")
time.Sleep(1 * time.Second) // Kad pagrindinė funkcija neužbaigtų anksčiau nei gorutina
}
Palyginimas su gijomis:
| Savybė | Go gorutinos | OS gijės |
|---|---|---|
| Valdymas | Go vykdymo aplinka | Operacinė sistema |
| Atminties naudojimas | Žemas, dinamiška steka | Aukštas, fiksuotas stekas |
| Kūrimas | Greitas | Lėtas |
| Planavimas | Kooperatyvinis | Preemptive |
| Sinchronizacija | Kanalai, sync paketas | Muteksai, OS semaforai |