我的Go并发编程学习之路

168 阅读2分钟

一直挺想较深入的学习学习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并发编程》书籍。在阅读过程中,肯定会有一些疑惑,当搞清楚之后会梳理成文字,按照自己的逻辑写成文字。在最近写文字的过程中,我发现经过自己阅读整理后,再写成文字,比只是阅读几次的,要深刻的也难忘记的多。