Conte a frequência das letras em textos usando computação paralela.
O paralelismo consiste em fazer em paralelo coisas que também podem ser feitas de forma sequencial. Um exemplo comum é contar a frequência das letras. Use o paralelismo para calcular a frequência total de cada letra em uma lista de textos.
Go dá suporte à concorrência por meio de "goroutines", que são iniciadas com a palavra-chave go.
É uma forma simples, leve e elegante de oferecer suporte à concorrência e é um dos maiores pontos fortes da linguagem.
Você pode notar que, embora este exercício se chame frequência de letras em paralelo, o termo "Parallel" não é usado com muita frequência em Go. Os Gophers preferem usar o termo Concurrent para descrever o gerenciamento de várias goroutines independentes ("processos" ou "threads" em outros contextos de linguagem). Embora esses termos sejam muitas vezes usados de forma intercambiável, os Gophers gostam de ser tecnicamente precisos e usam "concurrent" quando falam das execuções aparentemente simultâneas de goroutines.
Podemos até planejar que nossos programas rodem em paralelo, e às vezes eles podem até parecer rodar em paralelo, mas sem um conhecimento preciso do contexto de execução do nosso código a única coisa que podemos garantir é que os processos vão rodar de forma concorrente. Em outras palavras, eles podem estar executando sequencialmente rápido demais para conseguirmos distinguir, mas não estritamente ao mesmo tempo.
Para saber mais, dê uma olhada no post do The Go Blog: Concurrency is not parallelism.
Se você é novo nos recursos de concorrência do Go, aqui estão alguns materiais para começar. Recomendamos dar uma olhada neles antes de começar este exercício:
Para um mergulho bem mais profundo, você pode experimentar o livro Concurrency in Go, de @kat-co.
Neste exercício, os testes de unidade não conseguem determinar se você escreveu uma boa solução concorrente.
Em vez disso, o melhor é resolver este exercício localmente e executar os benchmarks com go test -bench ..
Em uma boa solução, você deve ver que a versão concorrente apresenta um número menor de nanossegundos por operação (ns/op) do que a versão sequencial.
Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.
Exploramos as diferenças entre concorrência e paralelismo, vendo as diferentes abordagens adotadas por linguagens como JavaScript, Go, Elixir e Rust.