Функция runtime.GOMAXPROCS
Функция runtime.GOMAXPROCS управляет количеством потоков операционной системы (OS threads),
которые могут одновременно выполнять код Go. Она принимает один параметр типа int -
новое значение для максимального количества потоков. Если параметр равен 0,
функция не изменяет текущее значение, а только возвращает предыдущее.
Возвращаемое значение - количество потоков, установленное ранее.
Синтаксис
prev := runtime.GOMAXPROCS(n)
Пример с получением текущего значения
Давайте получим текущее значение GOMAXPROCS, передав в функцию аргумент 0:
package main
import (
"fmt"
"runtime"
)
func main() {
cpus := runtime.GOMAXPROCS(0)
fmt.Println(cpus)
}
Результат выполнения кода:
"4"
Пример с установкой нового значения
Давайте установим новое значение GOMAXPROCS и проверим, что оно изменилось:
package main
import (
"fmt"
"runtime"
)
func main() {
prev := runtime.GOMAXPROCS(2)
fmt.Println("Previous value:", prev)
curr := runtime.GOMAXPROCS(0)
fmt.Println("Current value:", curr)
}
Результат выполнения кода:
"Previous value: 4"
"Current value: 2"
Пример с использованием в параллельных вычислениях
Давайте посмотрим, как изменение GOMAXPROCS влияет на параллельное выполнение горутин:
package 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")
}
Результат выполнения кода:
"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,
которая запускает сборку мусора