Thank you, brother, the following jake brothers helped me to bring out all the confusion.
在 2019年4月10日星期三 UTC+8下午9:31:41,Ian Lance Taylor写道: > > On Wed, Apr 10, 2019 at 4:52 AM <mount...@gmail.com <javascript:>> wrote: > > > > My macos has 4 cores, but i start 3 goroutines, 2 sub goroutines, 1 > main goroutine. > > After main goroutine exec 3 times output, triggering gc causes > gcwaiting=1. > > Finally all goroutine blocking > > > > package main > > > > import ( > > "fmt" > > "log" > > "net/http" > > _ "net/http/pprof" > > "runtime" > > > > // "runtime" > > "time" > > ) > > > > func deadloop() { > > for { > > } > > } > > func main() { > > go func() { > > log.Println(http.ListenAndServe("localhost:6060", nil)) > > }() > > > > go deadloop() > > > > i := 3 > > for { > > time.Sleep(time.Second * 1) > > i-- > > fmt.Println("I got scheduled!") > > if i == 0 { > > runtime.GC() //will set gcwaiting=1, causes other goroutines not to be > scheduled > > } > > } > > } > > I'm not sure quite what you are asking, but the garbage collector has > to briefly stop all goroutines twice each cycle, as described in the > comment in runtime/mgc.go. > > Ian > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.