Junior
O que são goroutines?
sobes.tech IA
Resposta da IA
Fios leves de execução, geridos pelo ambiente de execução do Go. São criados com a palavra-chave go antes de chamar uma função.
Características principais:
- Menor consumo de memória: A goroutine começa com um tamanho de pilha pequeno (normalmente 2 KB), que pode aumentar ou diminuir dinamicamente.
- Criação mais rápida: Criar uma goroutine é muito mais rápido do que criar um thread do sistema.
- Multiplexação em threads do sistema: Muitas goroutines podem ser multiplexadas em menos threads do sistema pelo agendador do Go.
- Planeamento cooperativo: As goroutines não são interrompidas preemptivamente; cedem voluntariamente o controlo ao agendador (por exemplo, em chamadas bloqueantes ou chamadas explícitas a
runtime.Gosched()).
Exemplo de criação:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Olá de uma goroutine!")
}
func main() {
go sayHello() // Executa sayHello como uma goroutine
fmt.Println("Olá da função principal!")
time.Sleep(1 * time.Second) // Para que a função principal não termine antes da goroutine
}
Comparação com threads:
| Característica | Goroutines do Go | Threads do SO |
|---|---|---|
| Gestão | Ambiente de execução do Go | Sistema operativo |
| Consumo de memória | Baixo, pilha dinâmica | Alto, pilha fixa |
| Criação | Rápida | Lenta |
| Planeamento | Cooperativo | Preemptivo |
| Sincronização | Canais, pacote sync | Mútex, semáforos do SO |