For example,

package main

import (
    "runtime"
    "time"
)

var sum1 int64

func add1() {
    for i := 0; i < 10000; i++ {
        runtime.Gosched()
        for j := 0; j < 10000; j++ {
            sum1++
        }
    }
}

func bar() {
    for {
        add1()
    }
}

func main() {
    runtime.GOMAXPROCS(1)
    go bar()
    time.Sleep(1 * time.Second)
    println("debug>>>")
}

https://play.golang.org/p/fD-0JG1Ow9

Peter

On Tuesday, September 5, 2017 at 1:02:59 AM UTC-4, 刘桂祥 wrote:
>
> I have a question about golang preempt schedule,  here is my example code;
>
> I doubt why the bar groutine don't happen preempt schedule? (I build with 
> -gcflags “-N -l” to stop func inline)
>
> More if my server with one or two cpu bound worker goroutine runing, when 
> the gc need stop the world, how it can stop the worker? 
>
>
> package main
>
> import “time"
>
>
> // GOMAXPROCS=1
>
> var sum1 int64
>
>
> func add1() {
>
>    for i := 0; i < 10000; i++ {
>
>        for j := 0; j < 10000; j++ {
>
>            sum1++
>
>        }
>
>    }
>
> }
>
>
> func bar() {
>
>    for {
>
>        add1()
>
>    }
>
> }
>
>
> func main() {
>
>
>     go bar()
>
>
>     time.Sleep(1*time.Second)
>
>
>     println("debug>>>")
>
> }
>
>
>

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

Reply via email to