runtime.GOMAXPROCS(runtime.NumCPU())
会被阻塞,直到所有协程都无阻塞。func Test_GOMAXPROCS(t *testing.T) {
SleepWait(10 * time.Second)
fmt.Println("???")
// result := runtime.GOMAXPROCS(runtime.NumCPU())
// fmt.Println("result", result)
for i := 0; i < 8; i++ {
go func() {
for {
}
}()
}
select {}
}
func SleepWait(duration time.Duration) {
fmt.Println("?")
result := runtime.GOMAXPROCS(runtime.NumCPU() / 2)
fmt.Println("result", result)
done := make(chan bool)
for i := 0; i < 8; i++ {
go func() {
defer fmt.Println("!!")
for {
select {
case <-done:
return
default:
}
}
}()
}
fmt.Println("duration:", duration)
<-time.After(duration)
close(done)
fmt.Println("??")
}