空select报deadlock
直接在main函数里写上一个空select会报:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [select (no cases)]:
而再开一个协程去执行就可以:
func main() {
go func() {
for {
fmt.Println("go routine here")
time.Sleep(time.Second)
}
}()
select {}
}
而原因则再于go的调度方式1:
有一个goroutine,即主程序,在等待一个选择,并且没有其他goroutine可以让这个goroutine做任何事情。
没有其他的goroutine可以做任何事情来让这个goroutine
进展。这就是一个死锁。如果其他的goroutine是在一个循环中
发送和接收信息,这就不是一个死锁。
评论已关闭