为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算处于可运行状态的 goroutine 的数量

如何计算处于可运行状态的 goroutine 的数量

Go
开满天机 2022-04-26 15:43:29
我正在测试我的 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

如您所见,运行状态和可运行状态是不同的状态。


查看完整回答
反对 回复 2022-04-26
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信