func main() {
ch1 := make(chan int)
ch2 := make(chan int)
// goroutine 1
go func() {
ch1 <- 12
ch2 <- 13 // oh oh, wrong channel. deadlock between goroutine 1 and 2
}()
// goroutine 2
go func() {
println(<-ch1)
println(<-ch1)
}()
for {
// i'm busy
time.Sleep(time.Second)
}
}
答案 0 :(得分:1)
pprof允许您在运行时获取完整的goroutine堆栈转储,这将显示哪些goroutine被阻止以及为什么。这不完全是您描述的内容,但它足以查看何时发生部分死锁。它还包括一个专用的块分析器,用于监视阻塞的goroutines。