登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-03 18:33:33 285浏览 收藏

本篇文章向大家介绍《如何统计处于可运行状态的goroutine数量》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我正在测试我的 go 应用程序。现在我得到了一些信息,但我想知道如何知道处于可运行状态的 goroutine 的确切数量(给定某个时刻): numgoroutine() 包的 runtime 函数返回当前存在的 goroutine 数量(比处于可运行状态的 goroutine 数量多得多!)。

这是我的函数,每秒打印 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 数量是否正确?在我看来并非如此,因为这个数字是恒定的。 我如何获得正确的信息?


解决方案


我不建议使用这种方式(因为这就是它在运行时的工作方式,并且将来可能会改变),但在测试目的中会很好: https://play.golang.org/p/6gi26PF3iTT

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

以上就是《如何统计处于可运行状态的goroutine数量》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>