Sobes.tech
Middle+

O que são goroutines e como elas são estruturadas internamente?

sobes.tech IA

Resposta da IA

As goroutines são threads leves de execução em Go, gerenciados pelo runtime da linguagem em vez do sistema operativo. Ao contrário dos threads do sistema, as goroutines têm uma pilha muito pequena (começando com alguns quilobytes) e podem expandir-se dinamicamente.

Dentro de uma goroutine, ela é representada pela estrutura g (goroutine), que contém o estado, a pilha, os registos e outras informações. O escalonador de Go (scheduler) gere a troca entre goroutines usando um modelo M:N, onde M são os threads do sistema (threads OS) e N são as goroutines.

O escalonador distribui as goroutines entre os threads do sistema, permitindo uma utilização eficiente do multiprocessamento sem custos adicionais de criação e troca de threads do OS. Isto é conseguido através de multitarefa cooperativa e preemptiva dentro do runtime.

Exemplo de criação de uma goroutine:

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

func main() {
    go sayHello() // iniciar a goroutine
    time.Sleep(time.Second) // damos tempo para a goroutine executar
}