Функция runtime.NumGoroutine
Функция runtime.NumGoroutine возвращает
количество активных горутин в текущем процессе.
Она не принимает никаких параметров и возвращает
целое число int. Функция полезна для
мониторинга и отладки конкурентных программ,
позволяя отслеживать количество запущенных горутин
в любой момент времени.
Синтаксис
import "runtime"
count := runtime.NumGoroutine()
Пример
Давайте получим количество активных горутин в простой программе:
package main
import (
"fmt"
"runtime"
)
func main() {
goroutines := runtime.NumGoroutine()
fmt.Println(goroutines)
}
Результат выполнения кода:
1
Пример
Давайте запустим несколько горутин и проверим их количество:
package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// Simulate work
}()
}
goroutines := runtime.NumGoroutine()
fmt.Println(goroutines)
wg.Wait()
}
Результат выполнения кода:
6
В этом примере мы запускаем 5 горутин,
и runtime.NumGoroutine возвращает 6,
так как главная горутина также учитывается.
Пример
Давайте используем функцию для мониторинга количества горутин в циклических операциях:
package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
var wg sync.WaitGroup
maxGoroutines := 10
for i := 0; i < maxGoroutines; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
// Simulate work
}(i)
// Log current goroutines count
if i%3 == 0 {
fmt.Printf("Iteration %d: %d goroutines\n",
i, runtime.NumGoroutine())
}
}
wg.Wait()
fmt.Printf("Final: %d goroutines\n",
runtime.NumGoroutine())
}
Результат выполнения кода:
"Iteration 0: 2 goroutines"
"Iteration 3: 5 goroutines"
"Iteration 6: 8 goroutines"
"Iteration 9: 11 goroutines"
"Final: 1 goroutines"
Обратите внимание, что количество горутин увеличивается с каждой итерацией, так как запущенные горутины еще не завершились.
Смотрите также
-
функцию
runtime.GOMAXPROCS,
которая устанавливает количество используемых процессоров -
функцию
runtime.NumCPU,
которая возвращает количество логических процессоров -
функцию
runtime.Goexit,
которая завершает текущую горутину -
функцию
runtime.Gosched,
которая передает управление другим горутинам