Sobes.tech
Junior

Cosa sono le goroutine?

sobes.tech AI

Risposta dell'AI

Thread leggeri di esecuzione, gestiti dall'ambiente di runtime di Go. Vengono creati con la parola chiave go prima di chiamare una funzione.

Caratteristiche principali:

  • Minor consumo di memoria: La goroutine inizia con una pila di piccole dimensioni (di solito 2 KB), che può aumentare o diminuire dinamicamente.
  • Creazione più veloce: Creare una goroutine è molto più veloce rispetto alla creazione di un thread di sistema.
  • Multiplexing sui thread di sistema: Molte goroutine possono essere multiplexate su un numero inferiore di thread di sistema dal pianificatore di Go.
  • Pianificazione cooperativa: Le goroutine non vengono preemptivamente interrotte; cedono volontariamente il controllo al pianificatore (ad esempio, durante chiamate bloccanti o chiamate esplicite a runtime.Gosched()).

Esempio di creazione:

package main

import (
	"fmt"
	"time"
)

func sayHello() {
	fmt.Println("Ciao dal goroutine!")
}

func main() {
	go sayHello() // Esegue sayHello come goroutine
	fmt.Println("Ciao dalla funzione principale!")
	time.Sleep(1 * time.Second) // Per evitare che la funzione principale termini prima della goroutine
}

Confronto con i thread:

Caratteristica Goroutine di Go Thread del sistema operativo
Gestione Ambiente di runtime di Go Sistema operativo
Consumo di memoria Basso, pila dinamica Alto, pila fissa
Creazione Veloce Lento
Pianificazione Cooperativa Preemptiva
Sincronizzazione Canali, pacchetto sync Mutex, semafori del sistema operativo