使用平行運算計算多段文字中字母出現的頻率。
平行運算的重點,在於把那些也能循序完成的工作改成同時進行。 常見的例子就是計算字母出現的頻率。 請運用平行運算,計算由多段文字組成的陣列中,每個字母的總出現頻率。
Go 透過「goroutines」支援並行,goroutine 是用go關鍵字啟動的。這是提供並行支援的一種簡單、輕量又優雅的方式,也是這門語言最強大的優勢之一。
你可能會注意到,這個練習雖然叫做「_平行_字母頻率」,但在 Go 裡不常看到「Parallel」這個詞。Gopher 們偏好用Concurrent這個詞來描述多個獨立 goroutine 的管理(在其他語言的脈絡裡就是「process」或「thread」)。這兩個詞雖然經常互通使用,但 Gopher 喜歡在技術上力求精確,討論 goroutine 看似同時執行的情況時,會用「concurrent」。
雖然我們可以規劃讓程式平行執行,有時它們看似也在平行執行,但在無法確切掌握程式碼執行脈絡的情況下,我們唯一能保證的是這些行程會並行執行。換句話說,它們可能以我們無法分辨的速度循序執行,但並非嚴格地同時執行。
想了解更多,可以看看 The Go Blog 的這篇文章:Concurrency is not parallelism。
如果你剛接觸 Go 的並行功能,這裡有一些資源可以帶你入門。建議你在開始這個練習前先看看:
如果你想更深入鑽研,可以看看 @kat-co 寫的《Concurrency in Go》這本書。
在這個練習中,單元測試無法判斷你寫的並行解法好不好。比較好的做法是在本機解這個練習,並用go test -bench .執行基準測試。好的解法應該會看到並行版本每次操作的奈秒數(ns/op)比循序版本低。