在go的运行时lib中,我们有NumGoroutine()
来返回当时运行的go例程的总数。我想知道是否有一种简单的方法来获取特定功能的运行例程?
目前我告诉我,我有1000个,或者其他所有的例程,但我想知道我有500个例程运行func Foo。可能?简单?不应该打扰它?
答案 0 :(得分:6)
如果您对这些数字感兴趣,我恐怕您必须自己计算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 struct。