Table of Contents

1. 前言

Go语言的并发支持在语言上是第一级原生直接支持的,就像异步事件在Node.js上是语言原生支持的一样。Go语言的并发与其他语言的多线程使用还有点不太一样,在使用的时候需要从思路上理解这个”原生支持”的概念,才能用好。因此这篇博文就对其中的一些内容做个整理,此外在golang-practice这个代码库中进行实践操作,并进行监控观察效果。

2. 资料

因着Go语言在国内的火热,大量分析和资料其实都有了,这里我尽量多做整理,不做重复发明轮子的无用功:

channel & goroutine

sync & lock

3. 额外的几点

上面的资料可能因为时间问题,没有提到Context,实际上在真实场景中,对多routine的退出协作使用的更多的是context:Go Concurrency Patterns: Context

channel和锁之间的选择简单来说就是:

  • 如果有共享内存需要在多个routine之间共用,选择锁
  • 如果所有的内存都无需在routine之间共享,选择channel

EOF