Sobes.tech
Junior — Middle

Quais abordagens e ferramentas em Go são usadas para organizar cálculos paralelos e assíncronos com goroutines?

sobes.tech IA

Resposta da IA

No Go, para organizar cálculos paralelos e assíncronos, usam-se goroutines, que são threads leves iniciados com a palavra-chave go.

Ferramentas e abordagens principais:

  • Goroutines: permitem executar funções em paralelo sem gestão explícita de threads do sistema operativo.
  • Canais (channels): usados para trocar dados de forma segura entre goroutines e para sincronização.
  • select: operador para esperar várias operações em canais, permitindo lidar com dados de múltiplas fontes.

Exemplo:

package main

import (
    "fmt"
    "time"
)

func worker(id int, ch chan<- string) {
    time.Sleep(time.Second) // simulação de trabalho
    ch <- fmt.Sprintf("Trabalhador %d terminado", id)
}

func main() {
    ch := make(chan string)

    for i := 1; i <= 3; i++ {
        go worker(i, ch)
    }

    for i := 1; i <= 3; i++ {
        msg := <-ch
        fmt.Println(msg)
    }
}

Neste exemplo, três goroutines são executadas em paralelo, e o canal é usado para receber os resultados.

Assim, a combinação de goroutines e canais é a principal forma de organizar cálculos paralelos e assíncronos em Go.