channel主要做什么事情
题目来源:好未来
答案:
在 go 中遵循的原则有一条:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存
go 采用了 CSP 模型来实现通信,而 channel 则是实现中的重要桥梁
由于 channel 分为有缓存和无缓存两种类型
对于无缓存的 channel 保证了数据的发送和接收必须同时完成,否则发送方 goroutine 会阻塞等待数据被取出,同样接收方也会阻塞等待发送方发送数据
对于有缓存的 channel 只要缓冲区不空,使用有缓冲 channel 进行通信的 goroutine 可以异步的发送和接收数据
因此 channel 一般有以下使用场景
- goroutine 之间通信
- goroutine 同步
- 并发读写
- 充当同步量/互斥量
- 定时器
- …