Re: [go-nuts] gcwaiting=1 will causes block all the goroutines?

2019-04-10 Thread mountainfpf
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 > 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.


[go-nuts] gcwaiting=1 will causes block all the goroutines?

2019-04-10 Thread mountainfpf
Hi,

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
}
}
}

-- 
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.