Go语言的并发支持在语言上是第一级原生直接支持的,就像异步事件在Node.js上是语言原生支持的一样。Go语言的并发与其他语言的多线程使用还有点不太一样,在使用的时候需要从思路上理解这个”原生支持”的概念,才能用好。因此这篇博文就对其中的一些内容做个整理,此外在golang-practice这个代码库中进行实践操作,并进行监控观察效果。
因着Go语言在国内的火热,大量分析和资料其实都有了,这里我尽量多做整理,不做重复发明轮子的无用功:
channel & goroutine
sync & lock
上面的资料可能因为时间问题,没有提到Context,实际上在真实场景中,对多routine的退出协作使用的更多的是context:Go Concurrency Patterns: Context。
channel和锁之间的选择简单来说就是:
EOF