Функция runtime.GOMAXPROCS

Функция runtime.GOMAXPROCS управляет количеством потоков операционной системы (OS threads), которые могут одновременно выполнять код Go. Она принимает один параметр типа int - новое значение для максимального количества потоков. Если параметр равен 0, функция не изменяет текущее значение, а только возвращает предыдущее. Возвращаемое значение - количество потоков, установленное ранее.

Синтаксис

goprev := runtime.GOMAXPROCS(n)

Пример с получением текущего значения

Давайте получим текущее значение GOMAXPROCS, передав в функцию аргумент 0:

gopackage main

import (
  "fmt"
  "runtime"
)

func main() {
  cpus := runtime.GOMAXPROCS(0)
  fmt.Println(cpus)
}

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

go"4"

Пример с установкой нового значения

Давайте установим новое значение GOMAXPROCS и проверим, что оно изменилось:

gopackage main

import (
  "fmt"
  "runtime"
)

func main() {
  prev := runtime.GOMAXPROCS(2)
  fmt.Println("Previous value:", prev)
  curr := runtime.GOMAXPROCS(0)
  fmt.Println("Current value:", curr)
}

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

go"Previous value: 4"
"Current value: 2"

Пример с использованием в параллельных вычислениях

Давайте посмотрим, как изменение GOMAXPROCS влияет на параллельное выполнение горутин:

gopackage main

import (
  "fmt"
  "runtime"
  "sync"
)

func main() {
  runtime.GOMAXPROCS(2)
  var wg sync.WaitGroup
  for i := 0; i < 5; i++ {
    wg.Add(1)
    go func(id int) {
      defer wg.Done()
      fmt.Printf("Goroutine %d started\n", id)
    }(i)
  }
  wg.Wait()
  fmt.Println("All goroutines finished")
}

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

go"Goroutine 4 started"
"Goroutine 2 started"
"Goroutine 0 started"
"Goroutine 3 started"
"Goroutine 1 started"
"All goroutines finished"

Смотрите также

  • функцию runtime.NumCPU,
    которая возвращает количество логических процессоров в системе
  • функцию runtime.NumGoroutine,
    которая возвращает количество активных горутин
  • функцию runtime.Gosched,
    которая передает управление другим горутинам
  • функцию runtime.GC,
    которая запускает сборку мусора