Функция runtime.NumGoroutine

Функция runtime.NumGoroutine возвращает количество активных горутин в текущем процессе. Она не принимает никаких параметров и возвращает целое число int. Функция полезна для мониторинга и отладки конкурентных программ, позволяя отслеживать количество запущенных горутин в любой момент времени.

Синтаксис

goimport "runtime"

count := runtime.NumGoroutine()

Пример

Давайте получим количество активных горутин в простой программе:

gopackage main

import (
  "fmt"
  "runtime"
)

func main() {
  goroutines := runtime.NumGoroutine()
  fmt.Println(goroutines)
}

Результат выполнения кода:

go1

Пример

Давайте запустим несколько горутин и проверим их количество:

gopackage 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()
}

Результат выполнения кода:

go6

В этом примере мы запускаем 5 горутин, и runtime.NumGoroutine возвращает 6, так как главная горутина также учитывается.

Пример

Давайте используем функцию для мониторинга количества горутин в циклических операциях:

gopackage 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())
}

Результат выполнения кода:

go"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,
    которая передает управление другим горутинам