4

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

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

4

1 回答 1

7

如果您对这些数字感兴趣,恐怕您必须自己计算 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 结构

于 2013-08-08T18:49:25.273 回答