我正在测试我的 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 数量是否正确?在我看来不是,因为这个数字是恒定的。我如何获得正确的信息?
1 回答
互换的青春
TA贡献1797条经验 获得超6个赞
我不建议使用这种方式(因为这就是它在运行时内部的工作方式,并且将来可能会更改),但在测试目的中会很好: https: //play.golang.org/p/6gi26PF3iTT
如您所见,运行状态和可运行状态是不同的状态。
- 1 回答
- 0 关注
- 120 浏览
添加回答
举报
0/150
提交
取消