But I build with -gcflags "-N -l"  
here is gdb code:
(gdb)
Dump of assembler code for function main.main:
   0x0000000000002100 <+0>: mov    %gs:0x8a0,%rcx
   0x0000000000002109 <+9>: cmp    0x10(%rcx),%rsp
   0x000000000000210d <+13>: jbe    0x216c <main.main+108>
   0x000000000000210f <+15>: sub    $0x18,%rsp
   0x0000000000002113 <+19>: mov    %rbp,0x10(%rsp)
   0x0000000000002118 <+24>: lea    0x10(%rsp),%rbp
   0x000000000000211d <+29>: movl   $0x0,(%rsp)
   0x0000000000002124 <+36>: lea    0x6abfd(%rip),%rax        # 0x6cd28 
<main.bar.f>
   0x000000000000212b <+43>: mov    %rax,0x8(%rsp)
   0x0000000000002130 <+48>: callq  0x2bf60 <runtime.newproc>
   0x0000000000002135 <+53>: callq  0x253c0 <runtime.Gosched>
   0x000000000000213a <+58>: callq  0x242d0 <runtime.printlock>
   0x000000000000213f <+63>: lea    0x643b1(%rip),%rax        # 0x664f7 
<go.string.*+967>
   0x0000000000002146 <+70>: mov    %rax,(%rsp)
   0x000000000000214a <+74>: movq   $0x8,0x8(%rsp)
   0x0000000000002153 <+83>: callq  0x24bf0 <runtime.printstring>
   0x0000000000002158 <+88>: callq  0x24550 <runtime.printnl>
   0x000000000000215d <+93>: callq  0x24360 <runtime.printunlock>
   0x0000000000002162 <+98>: mov    0x10(%rsp),%rbp
   0x0000000000002167 <+103>: add    $0x18,%rsp
   0x000000000000216b <+107>: retq
   0x000000000000216c <+108>: callq  0x493c0 <runtime.morestack_noctxt>
   0x0000000000002171 <+113>: jmp    0x2100 <main.main>
End of assembler dump.
(gdb) disas bar
No symbol "bar" in current context.
(gdb) disas main.bar
Dump of assembler code for function main.bar:
   0x00000000000020d0 <+0>: mov    %gs:0x8a0,%rcx
   0x00000000000020d9 <+9>: cmp    0x10(%rcx),%rsp
   0x00000000000020dd <+13>: jbe    0x20ec <main.bar+28>
   0x00000000000020df <+15>: jmp    0x20e1 <main.bar+17>
   0x00000000000020e1 <+17>: jmp    0x20e3 <main.bar+19>
   0x00000000000020e3 <+19>: callq  0x2040 <main.add1>
   0x00000000000020e8 <+24>: jmp    0x20ea <main.bar+26>
   0x00000000000020ea <+26>: jmp    0x20e1 <main.bar+17>
   0x00000000000020ec <+28>: callq  0x493c0 <runtime.morestack_noctxt>
   0x00000000000020f1 <+33>: jmp    0x20d0 <main.bar>



在 2017年9月4日星期一 UTC+8下午3:54:13,John Souvestre写道:
>
> time.Sleep() will do the job, but you probably wouldn’t want to use it in 
> a compute-bound loop.
>
>  
>
> Perhaps the call to add1() got inlined in bar().  The compiler might have 
> simplified add1() first, since sum1 wasn’t being used anywhere.  Then 
> perhaps it inlined what was left.
>
>  
>
> You might want to use sum1 by printing it (not inside the loop!).
>
>  
>
> John
>
>     John Souvestre - New Orleans LA
>
>  
>
> *From:* golan...@googlegroups.com <javascript:> [mailto:
> golan...@googlegroups.com <javascript:>] *On Behalf Of *???
> *Sent:* 2017 September 04, Mon 02:42
> *To:* golang-nuts
> *Subject:* Re: [go-nuts] golang gc stop the world how to stop cpu busy 
> goroutine?
>
>  
>
> Yes, I just want to let the bar func goroutine run first  or replace 
> runtime.Gosched() 
> with time.Sleep,
>
> But I still doubt why add1 in bar func don't happen preempt schedule ?
>
>
> 在 2017年9月4日星期一 UTC+8下午3:25:04,John Souvestre写道:
>
> I think that you put the call to runtime.Gosched() in the wrong place.  
> You want to place it in the routine which needs to be pre-empted.  In your 
> example, in add1() inside the “for i” loop or in bar() in the “for” loop.
>
>  
>
> John
>
>     John Souvestre - New Orleans LA
>
>  
>
> *From:* golan...@googlegroups.com [mailto:golan...@googlegroups.com] *On 
> Behalf Of *???
> *Sent:* 2017 September 04, Mon 02:10
> *To:* golang-nuts
> *Subject:* Re: [go-nuts] golang gc stop the world how to stop cpu busy 
> goroutine?
>
>  
>
> package main
>
>  
>
> import "runtime"
>
>  
>
> // GOMAXPROCS=1
>
> var sum1, summain int64
>
>  
>
> func add1() {
>
>     for i := 0; i < 10000; i++ {
>
>         for j := 0; j < 10000; j++ {
>
>             sum1++
>
>         }
>
>     }
>
> }
>
>  
>
> func bar() {
>
>     for {
>
>         add1()
>
>     }
>
> }
>
>  
>
> func main() {
>
>     go bar()
>
>     runtime.Gosched()
>
>     println("debug>>>")
>
> }
>
>
> above is my example code,when I set GOMAXPROCS=1 and build with -gcflags 
> "-N -l"  the println("debug>>>") don't  execute 
>
> I just doubt the go runtime support peempt schedule in call function,   it 
> don't work ??
>
>
>
> 在 2017年9月4日星期一 UTC+8下午2:20:37,John Souvestre写道:
>
> Although a goroutine isn’t pre-emptible by the Go scheduler, there is an 
> opportunity whenever it does something which blocks or when it calls a 
> non-inlined function.  So generally the GC’s STW can take place pretty 
> quickly.  But if you are doing something with is totally compute bound then 
> it can be a problem.  An easy solution is to insert a call to 
> runtime.Gosched() every so often.
>
>  
>
> I believe that there is an ongoing discussion about a way for Go to plan 
> ahead and be able to handle even these cases, but it’s something for the 
> future.
>
>  
>
> John
>
>     John Souvestre - New Orleans LA
>
>  
>
> *From:* golan...@googlegroups.com [mailto:golan...@googlegroups.com] *On 
> Behalf Of *???
> *Sent:* 2017 September 04, Mon 00:47
> *To:* golang-nuts
> *Subject:* [go-nuts] golang gc stop the world how to stop cpu busy 
> goroutine?
>
>  
>
> when have one or two cpu busy goroutine in my server (example for loop 
> empty),  the gc stop the world how to stop the goroutine ?
>
> -- 
> 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...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
> -- 
> 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...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
> -- 
> 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...@googlegroups.com <javascript:>.
> For more options, visit https://groups.google.com/d/optout.
>

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