Sobes.tech
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