Is there a recommended tutorial?

在 2019年3月1日星期五 UTC+8下午12:21:58,Robert Engels写道:
>
> I think it would be helpful if you learned more about concurrent 
> programming. It is 10x harder, even with the simplifications that Go 
> offers. If you don’t understand the concepts you are going to struggle. 
> Start with some tutorials and work your way up. 
>
> On Feb 28, 2019, at 10:14 PM, mount...@gmail.com <javascript:> wrote:
>
> This is the stack information printed when blocking, how to see which G 
> blocking program?
>
> SIGABRT: abort
> PC=0x7fff9ceabbf2 m=0 sigcode=0
>
> goroutine 0 [idle]:
> runtime.pthread_cond_wait(0x1967620, 0x19675e0, 0x7fff00000000)
>         /usr/local/go/src/runtime/sys_darwin.go:302 +0x51
> runtime.semasleep(0xffffffffffffffff, 0x7fff5fbff670)
>         /usr/local/go/src/runtime/os_darwin.go:63 +0x85
> runtime.notesleep(0x19673e0)
>         /usr/local/go/src/runtime/lock_sema.go:167 +0xe3
> runtime.stoplockedm()
>         /usr/local/go/src/runtime/proc.go:2165 +0x8a
> runtime.schedule()
>         /usr/local/go/src/runtime/proc.go:2565 +0x2d9
> runtime.park_m(0xc000072480)
>         /usr/local/go/src/runtime/proc.go:2676 +0xae
> runtime.mcall(0x105722b)
>         /usr/local/go/src/runtime/asm_amd64.s:299 +0x5b
>
> goroutine 1 [semacquire]:
> sync.runtime_Semacquire(0xc000027794)
>         /usr/local/go/src/runtime/sema.go:56 +0x39
> sync.(*WaitGroup).Wait(0xc000027794)
>         /usr/local/go/src/sync/waitgroup.go:130 +0x64
> cmd/go/internal/work.(*Builder).Do(0xc00023b0e0, 0xc0003ee3c0)
>         /usr/local/go/src/cmd/go/internal/work/exec.go:174 +0x38e
> cmd/go/internal/run.runRun(0x195c300, 0xc00001e0e0, 0x1, 0x1)
>         /usr/local/go/src/cmd/go/internal/run/run.go:137 +0x55b
> main.main()
>         /usr/local/go/src/cmd/go/main.go:219 +0x7d4
>
> goroutine 5 [syscall]:
> os/signal.signal_recv(0x0)
>         /usr/local/go/src/runtime/sigqueue.go:139 +0x9f
> os/signal.loop()
>         /usr/local/go/src/os/signal/signal_unix.go:23 +0x22
> created by os/signal.init.0
>         /usr/local/go/src/os/signal/signal_unix.go:29 +0x41
>
> goroutine 50 [select]:
> cmd/go/internal/work.(*Builder).Do.func2(0xc000027794, 0xc00023b0e0, 
> 0xc0004b0620)
>         /usr/local/go/src/cmd/go/internal/work/exec.go:155 +0x12f
> created by cmd/go/internal/work.(*Builder).Do
>         /usr/local/go/src/cmd/go/internal/work/exec.go:152 +0x36a
>
> goroutine 51 [select]:
> cmd/go/internal/work.(*Builder).Do.func2(0xc000027794, 0xc00023b0e0, 
> 0xc0004b0620)
>         /usr/local/go/src/cmd/go/internal/work/exec.go:155 +0x12f
> created by cmd/go/internal/work.(*Builder).Do
>         /usr/local/go/src/cmd/go/internal/work/exec.go:152 +0x36a
>
> goroutine 52 [syscall]:
> syscall.Syscall6(0x7, 0x12006, 0xc000050c24, 0x0, 0xc0002f43f0, 0x0, 0x0, 
> 0xc0002f43f0, 0x0, 0xc0000e2400)
>         /usr/local/go/src/syscall/asm_darwin_amd64.s:41 +0x5
> syscall.wait4(0x12006, 0xc000050c24, 0x0, 0xc0002f43f0, 0x90, 0x1566d60, 
> 0x14cc401)
>         /usr/local/go/src/syscall/zsyscall_darwin_amd64.go:34 +0x7b
> syscall.Wait4(0x12006, 0xc000050c74, 0x0, 0xc0002f43f0, 0x0, 0x1, 0x1)
>         /usr/local/go/src/syscall/syscall_bsd.go:129 +0x51
> os.(*Process).wait(0xc0002fd4a0, 0xc000034a00, 0xc000050cf8, 0x0)
>         /usr/local/go/src/os/exec_unix.go:38 +0x7b
> os.(*Process).Wait(0xc0002fd4a0, 0x15b89c8, 0x15b89d0, 0x15b89c0)
>         /usr/local/go/src/os/exec.go:125 +0x2b
> os/exec.(*Cmd).Wait(0xc00052da20, 0x0, 0x0)
>         /usr/local/go/src/os/exec/exec.go:465 +0x5b
> os/exec.(*Cmd).Run(0xc00052da20, 0x50, 0xc0000df7c0)
>         /usr/local/go/src/os/exec/exec.go:309 +0x5c
> cmd/go/internal/base.RunStdin(0xc0000df7c0, 0x1, 0x1)
>         /usr/local/go/src/cmd/go/internal/base/base.go:162 +0x11e
> cmd/go/internal/run.buildRunProgram(0xc00023b0e0, 0xc0003ee3c0, 0x13999b3, 
> 0xc00023b150)
>         /usr/local/go/src/cmd/go/internal/run/run.go:151 +0x26d
> cmd/go/internal/work.(*Builder).Do.func1(0xc0003ee3c0)
>         /usr/local/go/src/cmd/go/internal/work/exec.go:107 +0x72
> cmd/go/internal/work.(*Builder).Do.func2(0xc000027794, 0xc00023b0e0, 
> 0xc0004b0620)
>         /usr/local/go/src/cmd/go/internal/work/exec.go:165 +0xbb
> created by cmd/go/internal/work.(*Builder).Do
>         /usr/local/go/src/cmd/go/internal/work/exec.go:152 +0x36a
>
> goroutine 53 [select]:
> cmd/go/internal/work.(*Builder).Do.func2(0xc000027794, 0xc00023b0e0, 
> 0xc0004b0620)
>         /usr/local/go/src/cmd/go/internal/work/exec.go:155 +0x12f
> created by cmd/go/internal/work.(*Builder).Do
>         /usr/local/go/src/cmd/go/internal/work/exec.go:152 +0x36a
>
> goroutine 24 [chan receive]:
> cmd/go/internal/base.processSignals.func1(0xc000086f00)
>         /usr/local/go/src/cmd/go/internal/base/signal.go:21 +0x34
> created by cmd/go/internal/base.processSignals
>         /usr/local/go/src/cmd/go/internal/base/signal.go:20 +0x93
>
> rax    0x104
> rbx    0xea00
> rcx    0x7fff5fbff488
> rdx    0xea00
> rdi    0x1967620
> rsi    0xea010000eb00
> rbp    0x7fff5fbff520
> rsp    0x7fff5fbff488
> r8     0x0
> r9     0x60
> r10    0x0
> r11    0x202
> r12    0x1967620
> r13    0x16
> r14    0x1
> r15    0x7fffa5c9d3c0
> rip    0x7fff9ceabbf2
> rflags 0x203
> cs     0x7
> fs     0x0
> gs     0x0
>
> 在 2019年2月28日星期四 UTC+8下午8:44:55,Sameer Ajmani写道:
>>
>> The deadlock happens because the channel is empty, so the receive 
>> operation blocks forever.
>>
>> The second version imports a package that may start new goroutines in its 
>> init functions. If so, those goroutines may not be deadlocked, but the main 
>> function is still blocked on the receive operation.
>>
>> It can be useful to send SIGQUIT to a blocked Go program to dump the 
>> goroutine stack traces to the terminal.
>>
>> S
>>
>> On Thu, Feb 28, 2019 at 4:19 AM <mount...@gmail.com> wrote:
>>
>>> dead lock:
>>>
>>> package main
>>>
>>> import (
>>>     "fmt"
>>>     // _ "github.com/go-sql-driver/mysql"
>>> )
>>>
>>> func main() {
>>>     c1 := make(chan int, 10)
>>>     fmt.Println(<-c1)
>>> }
>>>
>>>
>>> block:
>>>
>>> package main
>>>
>>> import (
>>>     "fmt"
>>>
>>>     _ "github.com/go-sql-driver/mysql"
>>> )
>>>
>>> func main() {
>>>     c1 := make(chan int, 10)
>>>     fmt.Println(<-c1)
>>> }
>>>
>>> -- 
>>> 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