gpt4 book ai didi

go - 如何计算可运行状态下goroutine的数量

转载 作者:行者123 更新时间:2023-12-01 22:45:27 24 4
gpt4 key购买 nike

我正在测试我的Go应用程序。现在,我正在获取一些信息,但是我想知道如何知道处于可运行状态的 goroutine的确切数量(给定时间):NumGoroutine()包的函数runtime返回当前存在的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.htmldebug.Stack返回当前堆栈跟踪。堆栈跟踪对于查看当前正在运行多少个goroutine,它们在做什么以及是否被阻塞非常有用。

如果我打印debug.Stack()(而不是runtime.NumGoroutine()),则结果将完全更改(每秒钟它始终打印相同的堆栈!)。我的问题是:len(debug.Stack())是否处于可运行状态的goroutines正确数量?在我看来,并非如此,因为这个数字是恒定的。
如何获得正确的信息?

最佳答案

我不建议使用这种方式(因为它是在运行时内部运行的方式,将来可能会更改),但是出于测试目的,这是可以的:
https://play.golang.org/p/6gi26PF3iTT

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

关于go - 如何计算可运行状态下goroutine的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com