特定的Go协程数量正在运行中。

5
在go的运行时库中,我们有NumGoroutine()函数来返回当前正在运行的Go协程总数。我想知道是否有一种简单的方法来获取特定函数正在运行的Go协程数量?
目前它告诉我所有Go协程的数量是1000,或者其他数字,但我想知道有多少个Go协程正在运行Foo函数。这可能吗?简单吗?值得去做吗?
1个回答

8

如果你对这些数字感兴趣,那么你需要自己统计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结构体


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接