Go死锁

死锁是指多个并发执行单元(如 goroutine)互相等待对方释放资源,导致所有相关方都无法继续执行的状态。在 Go 中,死锁通常发生在 channel 操作锁(mutex) 的使用不当时,例如pv不当操作。

容量=0读写必须严格同步,适用于精确控制。

容量>0允许临时存储数据,适用于解耦和流量控制。

发送方负责关闭 Channel,避免接收方死锁!

根据生产者和消费者的速度差

  • 如果生产者快,消费者慢:增大容量避免阻塞。
  • 如果消费者快,生产者慢:小容量即可。

不关闭 Channel 会怎样?

  • 无缓冲 Channel:通常不需要关闭(除非明确需要通知接收方)。
  • 有缓冲 Channel:如果接收方用 for range 循环,必须关闭以避免死锁:
0%