chan超时控制
go 中实现超时控制的时候, select-case,粗糙地在超时的时候返回而不管尚在执行中的 goroutine 的死活。结果是,大批量调用受到几个调用超时的影响,一直超时无法恢复。
context 可以设置超时处理,解决超时退出下 goroutine 的退出问题。
案例:比如抢购锁的使用
https://ictar.xyz/2018/03/20/如何用go实现超时控制/
生产者消费者
package main
import "fmt"
func Producer(ch chan int) {
for i := 1; i <= 10; i++ {
ch <- i
}
close(ch)
}
func Consumer( ch chan int, done chan bool) {
for {
value, ok := <-ch
if ok {
fmt.Printf(" recv: %d\n", value)
} else {
fmt.Printf("closed\n")
break
}
}
done <- true
}
func main() {
ch := make(chan int)
done := make(chan bool)
go Producer(ch)
go Consumer( ch, done)
<-done
}