在 go 的运行时库中,我们必须NumGoroutine()
返回当时运行的 go 例程的总数。我想知道是否有一种简单的方法来获取运行特定功能的 go 例程的数量?
目前我有它告诉我我有 1000 个或其他所有 go 例程,但我想知道我有 500 个运行 func Foo 的 go 例程。可能的?简单的?不应该打扰它吗?
在 go 的运行时库中,我们必须NumGoroutine()
返回当时运行的 go 例程的总数。我想知道是否有一种简单的方法来获取运行特定功能的 go 例程的数量?
目前我有它告诉我我有 1000 个或其他所有 go 例程,但我想知道我有 500 个运行 func Foo 的 go 例程。可能的?简单的?不应该打扰它吗?
如果您对这些数字感兴趣,恐怕您必须自己计算 goroutines。实现目标最便宜的方法是直接使用sync/atomic包。
import "sync/atomic"
var counter int64
func example() {
atomic.AddInt64(&counter, 1)
defer atomic.AddInt64(&counter, -1)
// ...
}
atomic.LoadInt64(&counter)
每当您想读取计数器的当前值时使用。
在你的程序中有几个这样的计数器并不少见,这样你就可以轻松地监控它。例如,看一下最近发布的 groupcache 源的CacheStats 结构。