Junior — Middle
Como distinguir uma goroutine de um thread normal de execução no sistema operativo?
sobes.tech IA
Resposta da IA
Uma goroutine é um thread de execução leve gerido pelo runtime do Go, não pelo sistema operativo. As principais diferenças:
- Leveza: As goroutines ocupam muito menos memória (normalmente alguns quilobytes de pilha), enquanto que os threads do sistema requerem megabytes.
- Planeamento: As goroutines são planeadas pelo runtime do Go (agendador M:N), não pelo sistema operativo. Isto permite executar milhares de goroutines em vários threads do sistema.
- Criação: Criar uma goroutine é muito barato — basta escrever
go função(), enquanto que criar um thread do sistema é mais dispendioso em recursos.
Exemplo de criação de uma goroutine:
func sayHello() {
fmt.Println("Olá do goroutine")
}
func main() {
go sayHello() // inicia uma goroutine
time.Sleep(time.Second) // espera para que a goroutine tenha tempo de executar
}
Assim, as goroutines são uma abstração sobre os threads do sistema operativo, otimizadas para programação concorrente em Go.