CodeBlanks Logo Icon CodeBlanks

GOMAXPROCS

GOMAXPROCS ile processor sayısını ayarlamayı öğrenirsin.

GOMAXPROCS

GOMAXPROCS, Go kodunu aynı anda çalıştırabilecek P (işlemci) sayısıdır. Varsayılanı kullanılabilir CPU sayısıdır. Ortam değişkeniyle ya da kodla ayarlanır:

GOMAXPROCS=4 ./app
runtime.GOMAXPROCS(4)  // eski değeri döndürür

Çalışma anında değiştirmek kısa bir dünya durdurma gerektirir; genellikle program başında bir kez yapılır.

Ne zaman düşürülür?

Aynı makinede birden çok Go servisi CPU paylaşıyorsa ya da konteyner CPU kotası çekirdek sayısından azsa GOMAXPROCS'u kotaya eşitlemek CPU kısıtlamasını (throttling) ve gecikme sıçramalarını azaltır. Go 1.25'ten itibaren çalışma zamanı cgroup kotasını okuyup bunu kendisi yapar ve kota değişirse güncellemeyi sürdürür.

Uygulama İşçi sayısı

CPU yoğun bir iş havuzu için işçi sayısını runtime.GOMAXPROCS(0)'dan al. isciSayisi() int fonksiyonu yaz; değer 1'den küçükse 1 döndürsün. Sonucun 1 veya daha büyük olduğunu yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "runtime"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "runtime"
)

func isciSayisi() int {
    n := runtime.GOMAXPROCS(0)
    if n < 1 {
        return 1
    }
    return n
}

func main() {
    fmt.Println(isciSayisi() >= 1)
}

Beklenen çıktı

true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 G/Ç ağırlıklı (çok ağ beklemeli) bir serviste GOMAXPROCS'u artırmak genellikle ne sağlar?

  • Pek bir şey; bekleyen goroutine'ler P kullanmaz Doğru cevap
  • Doğrusal hızlanma
  • Daha az bellek
  • Daha hızlı ağ

Açıklama: Ağ beklemesi netpoller'da yapılır ve P tutmaz; darboğaz CPU değilse P eklemek yardımcı olmaz.

2 Değiştirmeden oku

Soru
p := runtime.GOMAXPROCS(____)
Cevap
p := runtime.GOMAXPROCS(0)

Açıklama: GOMAXPROCS'a 1'den küçük bir değer verince ayar değişmez, yalnızca mevcut değer döner.

3 Durum ve öneri

Kavram Anlamı
CPU yoğun iş Çekirdek sayısı kadar
G/Ç yoğun iş Varsayılan yeterli
2 CPU kotalı konteyner 2
Go 1.25+ Kotayı kendisi okur

Uzman bölümündeki tüm dersler