2013-08-08 2 views
3

В runtime lib у нас есть NumGoroutine(), чтобы вернуть общее количество запущенных в данный момент хостов. Мне было интересно, есть ли простой способ получить количество запущенных функций определенной функции?Число конкретных ходовых запусков

В настоящее время у меня есть сообщение о том, что у меня 1000, или что-то еще, из всех подпрограмм, но я хотел бы знать, что у меня есть 500 ходов под управлением func Foo. Возможное? Просто? Не стоит с этим беспокоиться?

ответ

6

Боюсь, что вам нужно подсчитать горуты самостоятельно, если вас интересуют эти цифры. Самый дешевый способ достичь своей цели - использовать пакет sync/atomic напрямую.

import "sync/atomic" 

var counter int64 

func example() { 
    atomic.AddInt64(&counter, 1) 
    defer atomic.AddInt64(&counter, -1) 

    // ... 
} 

Использование atomic.LoadInt64(&counter) всякий раз, когда вы хотите, чтобы прочитать текущее значение счетчика.

И не редкость иметь пару таких счетчиков в вашей программе, чтобы вы могли легко ее контролировать. Например, посмотрите на CacheStats struct недавно опубликованного источника группового кэша.

Смежные вопросы