Go 并发模型:Channel 与 Context 最佳实践
如何用 Channel 建模生产者-消费者、扇入扇出、超时与取消?Context 在线程间传递取消与元数据,避免协程泄漏。
1. 扇入扇出
func fanOut(in <-chan T, n int) []<-chan T { /* ... */ }
func fanIn(cs ...<-chan T) <-chan T { /* ... */ }
2. 超时
select {
case <-time.After(200*time.Millisecond): /* timeout */
case v := <-ch: _ = v
}
3. 泄漏排查
- goroutine 泄漏:未读的 channel 阻塞;
- 使用
pprof的 goroutine profile 与阻塞分析。