Özet - Scheduler
- Go kursu
- Uzman
- Ders 6/34
- 4 dk
Scheduler mekanizmalarını birleştirerek bir analiz yazarsın.
Zamanlayıcı özeti
G'ler P'lerin yerel kuyruklarında bekler ve M'ler üzerinde çalışır. Boşta kalan P iş çalar; global kuyruk düzenli kontrol edilir; uzun çalışanlar sinyalle durdurulur; bloklayan syscall'da P başka M'ye devredilir; ağ G/Ç'si netpoller'da bekler.
GODEBUG=schedtrace=1000 ./app // her saniye zamanlayıcı özetischedtrace çıktısı P, M, G sayılarını ve kuyruk uzunluklarını gösterir.
Konteynerde GOMAXPROCS
Konteyner 2 CPU ile sınırlıysa ama makinede 64 çekirdek varsa, Go 1.25 öncesinde GOMAXPROCS 64 olur ve CPU kotası yüzünden program kısıtlanır (throttling). Go 1.25 cgroup sınırlarını okuyarak bunu otomatik ayarlar; eski sürümlerde go.uber.org/automaxprocs paketi aynı işi yapar.
Uygulama GOMAXPROCS ayarı
eski := runtime.GOMAXPROCS(2) ile P sayısını 2 yap, yeni değeri runtime.GOMAXPROCS(0) ile oku ve yazdır, sonra runtime.GOMAXPROCS(eski) ile geri al.
Başlangıç kodu
package main
import (
"fmt"
"runtime"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"runtime"
)
func main() {
eski := runtime.GOMAXPROCS(2)
fmt.Println(runtime.GOMAXPROCS(0))
runtime.GOMAXPROCS(eski)
}Beklenen çıktı
2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 CPU yoğun bir programda <code>GOMAXPROCS</code>'u çekirdek sayısının çok üstüne çıkarmak ne yapar?
- Hızlandırmaz; fazla bağlam değişimi ekler Doğru cevap
- Doğrusal hızlanma sağlar
- GC'yi kapatır
- Bellek kullanımını sıfırlar
Açıklama: Gerçek paralellik çekirdek sayısıyla sınırlıdır; fazladan P'ler yalnızca OS iş parçacıkları arasında geçiş maliyeti ekler.
2 Zamanlayıcı izi
GODEBUG=____=1000 ./app
GODEBUG=schedtrace=1000 ./app
Açıklama: schedtrace=1000 her 1000 ms'de zamanlayıcı durumunu stderr'e yazar.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
Work stealing |
Yük dengeleme |
Preemption |
Adil zaman paylaşımı |
Handoff |
Syscall'da P'yi koru |
Netpoller |
Bloklamayan ağ G/Ç |