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.