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.