golang channel 超时如何处理

Python015

golang channel 超时如何处理,第1张

个人理解的channel超时处理思路分享,若有错误或者不足,请联系我:qq 869329877

主程序通过go timeout()挂起一个协程,在timeout方法里面利用select来监控逻辑处理的变化,如果请求时间过长或者连接到其他服务比如grpc、mysql等服务中断导致的请求时间过长,则直接超时,超时要返回定义的管道数据结果,否则程序会报错。

我们在使用go执行命令的时候,需要设置超时时间,避免一直卡死。go里面超时最常用的就是context。下面通过一个context的例子演示一下,如何使用context完成 exec超时设置。

如果超时后,执行的命令cmd将会被kill 掉。

做了一个参考实例。假设某线程占用时间5秒,超时时间为2秒

func mian() {

lock := sync.Mutex{}

lock.Lock()

defer lock.Unlock()

timer := time.NewTimer(2 * time.Second)

end:=make(chan int)

go func() {

time.Sleep(5*time.Second)

fmt.Println("wait")

end<-1

}()

select {

case <-end:

case <-timer.C:

}

fmt.Println("End")

}