[英]what is the status of goroutine when execute time.Sleep() function
I'm curious about the status of goroutine when I execute the time.Sleep() function, for example: 当我执行time.Sleep()函数时,我对goroutine的状态感到好奇,例如:
func main() {
fmt.Println("before test")
time.Sleep(time.Second * 2)
fmt.Println("test")
}
if the goroutine would become the waiting state when execute the time.Sleep() function, how could the goroutine know when to change the state into the ready? 如果执行time.Sleep()函数时goroutine将成为等待状态,goroutine怎么知道何时将状态更改为ready?
I really want to know the underlying mechanism of time.Sleep() here. 我真的想知道time.Sleep()的基本机制。
The state of the goroutine will be sleep
. goroutine的状态将是
sleep
。 There is very short program you can test it with: 有一个很短的程序,你可以测试它:
package main
import (
"time"
)
func main() {
go func() {
time.Sleep(3 * time.Second)
}()
time.Sleep(1 * time.Second)
panic("foo")
}
Run it like that GOTRACEBACK=1 go run test.go
to get the state of all goroutines. 运行它就像
GOTRACEBACK=1 go run test.go
来获得所有goroutines的状态。
Output: 输出:
panic: foo
goroutine 1 [running]:
panic(0x45afa0, 0xc42006c000)
/usr/local/go/src/runtime/panic.go:500 +0x1a1
main.main()
/home/user/path/test.go:12 +0x96
goroutine 4 [sleep]:
time.Sleep(0xb2d05e00)
/usr/local/go/src/runtime/time.go:59 +0xe1
main.main.func1()
/home/user/path/test.go:9 +0x2b
created by main.main
/home/user/path/test.go:10 +0x39
exit status 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.