Go语言中通过goroutines和channel进行并发的控制。
- goroutines 提供了独立任务的并发/并行可能
- channel 提供goroutines间交流、同步的桥梁
理解Channel用法,参考这篇文章 《Go语言Channel的Buffered与Unbuffered》 ,总结channel有一下的特点:
- 保证goroutines并发安全
- 提供FIFO(先进先出)的特性
- 可以在goroutines传送和存储值
- 可以控制goroutines阻塞和非阻塞(控制执行和停止等待)
所以,我们需要从底层去了解channel的结构,channel 底层是一个hchan的数据结构:
1 | type hchan struct { |
先不去关注具体的字段意义,我们从最基本的出发