4

go のランタイム ライブラリではNumGoroutine()、その時点で実行されている go ルーチンの総数を返す必要があります。特定の関数で実行されている go ルーチンの数を取得する簡単な方法があるかどうか疑問に思っていましたか?

現在、すべての go ルーチンのうち 1000 個か何かがあるとのことですが、func Foo を実行している go ルーチンが 500 個あることを知りたいです。可能?単純?それを気にする必要はありませんか?

4

1 に答える 1

7

これらの数に興味がある場合は、ゴルーチンを自分で数えなければならないのではないかと思います。目標を達成するための最も安価な方法は、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 に答える