CodeBlanks Logo Icon CodeBlanks

Özet - Scheduler

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ı özeti

schedtrace çı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

main.go
package main

import (
    "fmt"
    "runtime"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
GODEBUG=____=1000 ./app
Cevap
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/Ç

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