Sobes.tech
Junior — Middle

Qual é a diferença entre a execução de código numa goroutine e o trabalho de um thread do sistema ao nível do sistema operativo?

sobes.tech IA

Resposta da IA

As goroutines em Go são threads leves geridos pelo runtime do Go, e não pelo sistema operativo. As principais diferenças:

  • Leveza: As goroutines ocupam muito pouca memória (normalmente alguns quilobytes de pilha), enquanto os threads do sistema requerem muito mais recursos.
  • Planeamento: O agendador de goroutines está integrado no runtime do Go e distribui as goroutines pelos threads do sistema, permitindo uma utilização eficiente da CPU.
  • Criação e troca: A criação e troca entre goroutines são mais rápidas do que entre threads do sistema, pois não requerem mudança de contexto do núcleo do sistema operativo.

Exemplo:

func main() {
    go func() {
        fmt.Println("Goroutine")
    }()
    fmt.Println("Thread principal")
    time.Sleep(time.Second) // Espera pela goroutine terminar
}

Aqui, a goroutine é iniciada dentro do processo, mas não corresponde diretamente a um thread do sistema separado.