轨道
/
Go
Go
/
练习
/
并行字母频率
并行字母频率

并行字母频率

中等

说明

使用并行计算统计文本中字母的频率。

并行是指把那些同样可以顺序完成的事情并行地做。一个常见的例子就是统计字母的频率。利用并行计算来算出文本数组中每个字母的总频率。

并发与并行

Go 通过“goroutines”来支持并发,用go关键字就能启动一个 goroutine。这种方式简单、轻量又优雅,是这门语言最强大的优势之一。

你可能会发现,这个练习叫_并行_字母频率,但在 Go 里却很少见到“Parallel”这个词。Gopher 们更愿意用Concurrent来描述对多个相互独立的 goroutine 的管理(在其他语言的语境里,这些就是“进程”或“线程”)。这两个说法经常被混用,但 Gopher 们喜欢在技术上保持准确,在讨论 goroutine 那种看似同时执行的情形时,会说“concurrent”。

我们可以让自己的程序按并行来设计,有时它们看起来也像是在并行运行,但只要不能确切掌握代码的执行上下文,我们能保证的就只是这些进程会并发执行。换句话说,它们可能以我们分辨不出的速度顺序执行,但并不是严格意义上的同时进行。

想了解更多,可以看看 Go 官方博客的这篇文章:Concurrency is not parallelism。

并发学习资源

如果你刚接触 Go 的并发特性,下面这些资源可以帮你上手。建议在开始这个练习之前先看一看:

如果想深入钻研,可以读一读 @kat-co 写的 Concurrency in Go 这本书。

测试

对这个练习来说,单元测试没法判断你写的并发解法好不好。更好的做法是在本地完成这个练习,再用go test -bench .运行基准测试。好的解法,其并发版本每次操作的纳秒数(ns/op)应该比顺序版本更低。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Go Exercism

准备好开始 并行字母频率 了吗?

注册 Exercism,借助 34 个概念165 个练习 和真人导师指导,学习并掌握 Go,全部免费。

深入探索 并行字母频率!

我们探讨并发与并行之间的区别,并看看 JavaScript、Go、Elixir 和 Rust 等语言采用的不同做法。