运行的特定go例程的数量

时间:2013-08-08 18:33:58

标签: go

在go的运行时lib中,我们有NumGoroutine()来返回当时运行的go例程的总数。我想知道是否有一种简单的方法来获取特定功能的运行例程?

目前我告诉我,我有1000个,或者其他所有的例程,但我想知道我有500个例程运行func Foo。可能?简单?不应该打扰它?

1 个答案:

答案 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