Compte la fréquence des lettres dans des textes en utilisant le calcul parallèle.
Le parallélisme consiste à faire en parallèle des choses qui peuvent aussi être faites de manière séquentielle. Un exemple courant est le comptage de la fréquence des lettres. Utilise le parallélisme pour calculer la fréquence totale de chaque lettre dans un tableau de textes.
Go prend en charge la concurrence grâce aux « goroutines », que l'on lance avec le mot-clé go.
C'est une façon simple, légère et élégante de gérer la concurrence, et l'une des plus grandes forces du langage.
Tu remarqueras peut-être que, bien que cet exercice s'appelle Parallel letter frequency, le terme « Parallel » n'est pas très souvent employé en Go. Les Gophers préfèrent utiliser le terme Concurrent pour décrire la gestion de plusieurs goroutines indépendantes (« processus » ou « threads » dans d'autres langages). Bien que ces termes soient souvent employés de manière interchangeable, les Gophers aiment être techniquement précis et parlent de « concurrent » lorsqu'ils évoquent les exécutions apparemment simultanées de goroutines.
On peut bien sûr concevoir nos programmes pour qu'ils s'exécutent en parallèle, et il leur arrive de sembler le faire, mais sans connaître précisément le contexte d'exécution de notre code, tout ce qu'on peut garantir, c'est que les processus s'exécuteront de manière concurrente. Autrement dit, ils peuvent s'exécuter de façon séquentielle trop vite pour qu'on puisse le distinguer, mais pas strictement simultanément.
Pour en savoir plus, jette un œil à l'article du Go Blog : Concurrency is not parallelism.
Si tu débutes avec les fonctionnalités de concurrence de Go, voici quelques ressources pour te lancer. On te recommande de les parcourir avant de commencer cet exercice :
Pour une analyse vraiment approfondie, tu peux essayer le livre Concurrency in Go de @kat-co.
Pour cet exercice, les tests unitaires ne peuvent pas déterminer si tu as écrit une bonne solution concurrente.
À la place, le mieux est de résoudre cet exercice en local et d'exécuter les benchmarks avec go test -bench ..
Pour une bonne solution, tu devrais constater que la version concurrente affiche un nombre de nanosecondes par opération (ns/op) plus faible que la version séquentielle.
Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 34 concepts165 exercices, et un vrai mentorat humain, le tout gratuitement.
On explore les différences entre concurrence et parallélisme, en examinant les différentes approches adoptées par des langages comme JavaScript, Go, Elixir et Rust.