Μέτρησε τη συχνότητα των γραμμάτων σε κείμενα χρησιμοποιώντας παράλληλο υπολογισμό.
Ο παραλληλισμός αφορά την εκτέλεση παράλληλα πραγμάτων που μπορούν να γίνουν και σειριακά. Ένα συνηθισμένο παράδειγμα είναι η μέτρηση της συχνότητας των γραμμάτων. Χρησιμοποίησε παραλληλισμό για να υπολογίσεις τη συνολική συχνότητα κάθε γράμματος σε μια λίστα με κείμενα.
Η Go υποστηρίζει ταυτοχρονισμό μέσω "goroutines", οι οποίες ξεκινούν με τη λέξη-κλειδί go.
Είναι ένας απλός, ελαφρύς και κομψός τρόπος να παρέχεις υποστήριξη ταυτοχρονισμού και αποτελεί ένα από τα μεγαλύτερα πλεονεκτήματα της γλώσσας.
Ίσως παρατηρήσεις ότι ενώ αυτή η άσκηση ονομάζεται Parallel letter frequency, ο όρος "Parallel" δεν χρησιμοποιείται πολύ συχνά στη Go. Οι Gophers προτιμούν τον όρο Concurrent για να περιγράψουν τη διαχείριση πολλαπλών ανεξάρτητων goroutines ("διεργασίες" ή "νήματα" σε άλλα πλαίσια γλωσσών). Αν και αυτοί οι όροι χρησιμοποιούνται συχνά εναλλακτικά, οι Gophers θέλουν να είναι τεχνικά ακριβείς και χρησιμοποιούν το "concurrent" όταν συζητούν τις φαινομενικά ταυτόχρονες εκτελέσεις των goroutines.
Αν και μπορούμε να σχεδιάσουμε τα προγράμματά μας ώστε να τρέχουν παράλληλα, και κάποιες φορές μπορεί να φαίνεται ότι τρέχουν παράλληλα, χωρίς ακριβή γνώση του περιβάλλοντος εκτέλεσης του κώδικά μας το μόνο που μπορούμε να εγγυηθούμε είναι ότι οι διεργασίες θα εκτελούνται ταυτόχρονα. Με άλλα λόγια, μπορεί να εκτελούνται σειριακά πιο γρήγορα απ' ό,τι μπορούμε να ξεχωρίσουμε, αλλά όχι αυστηρά ταυτόχρονα.
Για περισσότερα, ρίξε μια ματιά στην ανάρτηση του The Go Blog: Concurrency is not parallelism.
Αν είσαι καινούριος στις δυνατότητες ταυτοχρονισμού της Go, ορίστε μερικοί πόροι για να ξεκινήσεις. Σου προτείνουμε να ρίξεις μια ματιά σε αυτά πριν ξεκινήσεις αυτή την άσκηση:
Αν θέλεις να εμβαθύνεις πραγματικά, μπορείς να δοκιμάσεις το βιβλίο Concurrency in Go του @kat-co.
Σε αυτή την άσκηση, τα unit tests δεν μπορούν να κρίνουν αν έγραψες μια καλή ταυτόχρονη λύση.
Αντ' αυτού, το καλύτερο είναι να λύσεις αυτή την άσκηση τοπικά και να τρέξεις τα benchmarks με go test -bench ..
Σε μια καλή λύση, θα πρέπει να δεις ότι η ταυτόχρονη εκδοχή εμφανίζει μικρότερο αριθμό νανοδευτερολέπτων ανά πράξη (ns/op) από τη σειριακή εκδοχή.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Go με 34 έννοιες165 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.
Εξερευνούμε τις διαφορές ανάμεσα στον ταυτοχρονισμό και τον παραλληλισμό, εξετάζοντας διαφορετικές προσεγγίσεις που ακολουθούν γλώσσες όπως η JavaScript, η Go, η Elixir και η Rust.