Golang 标杆分析 Goroutines
package main
import (
"fmt"
"runtime"
"runtime/debug"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
analyzeGoroutines("Goroutine 1")
}()
go func() {
defer wg.Done()
analyzeGoroutines("Goroutine 2")
}()
wg.Wait()
}
func analyzeGoroutines(name string) {
for {
// 每隔一秒钟打印一次当前的 goroutine 堆栈跟踪
time.Sleep(1 * time.Second)
printGoroutineStacks(name)
}
}
func printGoroutineStacks(name string) {
stacks := make([]byte, 1024*1024)
length := runtime.Stack(stacks, true)
fmt.Printf("%s:\n%s\n", name, stacks[:length])
}
这段代码定义了一个main
函数,在其中启动了两个goroutines。每个goroutine都会调用analyzeGoroutines
函数,在这个函数中,通过printGoroutineStacks
函数周期性地打印出当前所有goroutines的堆栈跟踪信息。这样可以帮助开发者了解程序的运行状态,检查可能存在的问题。
评论已关闭