Sobes.tech
Junior — Middle

Como são implementados a concorrência, a assíncronia e o paralelismo na linguagem Go?

sobes.tech IA

Resposta da IA

Em Go, a concorrência, a assíncronia e o paralelismo são implementados usando goroutines e canais.

  • Goroutines são threads leves que são iniciados com a palavra-chave go. Permitem executar funções de forma assíncrona e competir por recursos.
  • Canais são usados para trocar dados de forma segura entre goroutines, garantindo sincronização e transmissão de mensagens.

O paralelismo é alcançado ao lançar várias goroutines que podem ser executadas simultaneamente em múltiplos núcleos do processador, se GOMAXPROCS for definido.

Exemplo:

package main
import (
    "fmt"
    "time"
)

func worker(id int, ch chan string) {
    time.Sleep(time.Second)
    ch <- fmt.Sprintf("Trabalhador %d concluído", id)
}

func main() {
    ch := make(chan string)
    for i := 1; i <= 3; i++ {
        go worker(i, ch) // inicia uma goroutine
    }
    for i := 1; i <= 3; i++ {
        msg := <-ch // recebe o resultado do canal
        fmt.Println(msg)
    }
}

Assim, Go fornece meios simples e eficientes para trabalhar com concorrência e paralelismo.