GOMAXPROCS
- Go kursu
- Uzman
- Ders 20/34
- 4 dk
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
package main
import (
"fmt"
"runtime"
)
func main() {
// buraya yaz
}Örnek çözüm
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
p := runtime.GOMAXPROCS(____)
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 |