一直挺想较深入的学习学习Go的并发编程
学习Go并发编程,我打算从三个方面入手:
首先是Go并发原语的使用及其重要部分源码分析,它包括:
- atomic包的原子操作
- 资源并发访问最主流的手段:Mutex与RWMutex
- 并发安全的数据类型,如snyc.Pool等
- 具有Go语言特色的Channel
- 上下文信息穿透:Context
- 协同等待,任务编排:WaitGroup
- 只能执行一次的Once
- 有助于性能提升的Pool
- 条件变量Cond
除此之外还要补充一些分布式并发的原理学习。
然后是goroutine
- goroutine是协程,那为了学习协程,也得学习它的爸爸和爷爷:线程和进程。
- 协程本身以及Go语言的调度器原理
最后,检验学习成果的是实战运用,会找一些经典项目的相关部分做学习。
选用的学习的资料如下:
鸟窝老师在极客时间的《Go 并发编程实战课》专栏
- 专栏侧重于Go并发原语的源码解析和常见用法,另外还有一些非常典型的避坑指南。
郝林老师的《Go并发编程》第2版
- 书籍中也用了大篇幅介绍Go并发原语,和专栏是一个很好的呼应。
- 我个人认为该书更大的价值在于对于goroutine偏底层的介绍。
另外,由于并发编程始终绕不开操作系统,但是去啃《深入计算机系统》,一方面个人能力有限,可能坚持不下来,另一方面会混淆重点,毕竟我当前阶段是想学Go。所以补充了另外两本没那么难的书:
- 《程序是怎样跑起来的》
- 《计算机是怎么跑起来》
两本书加起来读,相当于大致的学习了计算机组成原理和操作系统,有助于理解goroutine相关的知识。
在学习过程中,我会持续输出个人的学习记录,基本上基于《Go 并发编程实战课》专栏和《Go并发编程》书籍。在阅读过程中,肯定会有一些疑惑,当搞清楚之后会梳理成文字,按照自己的逻辑写成文字。在最近写文字的过程中,我发现经过自己阅读整理后,再写成文字,比只是阅读几次的,要深刻的也难忘记的多。