Junior — Middle
Como é que as goroutines interagem com a memória na execução de programas em Go?
sobes.tech IA
Resposta da IA
As goroutines em Go são threads leves gerenciados pelo runtime do Go. Cada goroutine tem sua própria pilha de memória, que inicialmente é pequena (cerca de 2 KB) e pode expandir-se dinamicamente conforme necessário.
A interação com a memória ocorre da seguinte forma:
- Todas as goroutines compartilham um heap, onde os objetos alocados dinamicamente são armazenados.
- A memória no heap é gerenciada por um coletor de lixo que rastreia as referências de todas as goroutines.
- Para transferir dados entre goroutines, geralmente usam-se canais (channels), que proporcionam uma troca segura sem condições de corrida.
- A pilha de cada goroutine é isolada, permitindo alternar entre elas de forma eficiente sem custos elevados.
Exemplo de início de duas goroutines que trocam dados através de um canal:
func main() {
ch := make(chan string)
go func() {
ch <- "olá da goroutine"
}()
msg := <-ch
fmt.Println(msg)
}
Dessa forma, as goroutines compartilham a memória do heap, mas possuem pilhas separadas, garantindo uma execução paralela eficiente e segura.