我正在测试我的 Go 应用程序。现在我正在获取一些信息,但我想知道如何知道处于可运行状态的 goroutinesNumGoroutine()的确切数量(给定某个时间点):包的函数runtime返回当前存在的 goroutines 的数量(很多比那些处于可运行状态的还要多!)。
这是我的函数,它每秒打印一次 goroutine 编号:
func count() {
for {
fmt.Println("Number of runnable goroutines: ", runtime.NumGoroutine())
time.Sleep(1 * time.Second)
}
}
不幸的是,结果并不好(程序中的 goroutine 数量不断增长,我知道这么多 goroutine 不可能同时处于活动状态!)。此页面:https ://golang.org/doc/diagnostics.html表示debug.Stack 返回当前堆栈跟踪。堆栈跟踪有助于查看当前正在运行的 goroutine 数量、它们在做什么以及它们是否被阻塞。
如果我打印debug.Stack()(而不是 runtime.NumGoroutine()),结果会完全改变(每秒它总是打印相同的堆栈!)。我的问题是:处于可运行len(debug.Stack())状态的 goroutine 数量是否正确?在我看来不是,因为这个数字是恒定的。我如何获得正确的信息?
互换的青春
相关分类