Sobes.tech
Senior

O que é uma goroutine? Como ela é estruturada?

sobes.tech IA

Resposta da IA

Uma goroutine é um fio de execução leve na linguagem Go. Ao contrário dos fios do sistema, as goroutines são geridas pelo runtime do Go e têm uma pilha muito pequena (começando com alguns quilobytes e podendo crescer dinamicamente). Isto permite executar centenas de milhares de goroutines simultaneamente com baixos custos de overhead.

Estrutura de uma goroutine:

  • Ao criar uma goroutine (com o operador go), o agendador do Go coloca-a na fila de tarefas prontas para execução.
  • O runtime do Go usa um agendamento M:N: M threads do sistema (threads OS) atendem N goroutines.
  • As goroutines trocam de contexto ao nível do runtime, o que é mais rápido do que trocar de threads do sistema.
  • Cada thread (M) pode executar várias goroutines (N), alternando entre elas em bloqueios ou conforme necessário.

Exemplo de criação de uma goroutine:

func sayHello() {
    fmt.Println("Olá da goroutine")
}

func main() {
    go sayHello() // inicia a goroutine
    time.Sleep(time.Second) // espera para que a goroutine tenha tempo de executar
}