Junior
Ce sunt goroutines?
sobes.tech AI
Răspuns de la AI
Fire de execuție ușoare, gestionate de mediul de execuție Go. Sunt create cu cuvântul cheie go înainte de apelarea unei funcții.
Caracteristici principale:
- Consumul mai mic de memorie: Goroutine începe cu o stivă mică (de obicei 2 KB), care poate crește sau scade dinamic.
- Creare mai rapidă: Crearea unei goroutine este mult mai rapidă decât crearea unui fir de sistem.
- Multiplexare pe fire de sistem: Multe goroutine pot fi multiplexate pe un număr mai mic de fire de sistem de către planificatorul Go.
- Planificare cooperativă: Goroutine-urile nu sunt întrerupte preemptiv; ele cedează voluntar controlul planificatorului (de exemplu, în apeluri blocante sau apeluri explicite
runtime.Gosched()).
Exemplu de creare:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Salut din goroutine!")
}
func main() {
go sayHello() // Rulează sayHello ca goroutine
fmt.Println("Salut din funcția principală!")
time.Sleep(1 * time.Second) // Pentru ca funcția principală să nu se termine înaintea goroutine-ului
}
Comparativ cu firele:
| Caracteristici | Goroutine Go | Firele de sistem ale OS |
|---|---|---|
| Management | Mediul de execuție Go | Sistemul de operare |
| Consum de memorie | Scăzut, stivă dinamică | Ridicat, stivă fixă |
| Creare | Rapid | Lent |
| Planificare | Cooperativă | Preemptivă |
| Sincronizare | Canale, pachet sync | Mutex-uri, semafoare OS |