channel主要做什么事情

题目来源:好未来

答案:

在 go 中遵循的原则有一条:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存

go 采用了 CSP 模型来实现通信,而 channel 则是实现中的重要桥梁

由于 channel 分为有缓存和无缓存两种类型

对于无缓存的 channel 保证了数据的发送和接收必须同时完成,否则发送方 goroutine 会阻塞等待数据被取出,同样接收方也会阻塞等待发送方发送数据

对于有缓存的 channel 只要缓冲区不空,使用有缓冲 channel 进行通信的 goroutine 可以异步的发送和接收数据

因此 channel 一般有以下使用场景

  • goroutine 之间通信
  • goroutine 同步
  • 并发读写
  • 充当同步量/互斥量
  • 定时器