G-M-P modeli
- Go kursu
- Uzman
- Ders 1/34
- 4 dk
Goroutine, makine ve processor üçlüsünü öğrenirsin.
G-M-P modeli
Go zamanlayıcısı üç yapıyla çalışır: G (goroutine: yığını ve durumu), M (machine: bir işletim sistemi iş parçacığı) ve P (processor: çalıştırma hakkı ve yerel kuyruk). Bir G'nin çalışması için bir M'nin bir P tutması gerekir.
P sayısı = GOMAXPROCS (varsayılan: CPU çekirdeği sayısı)
M sayısı = gerektiği kadar (bloklayan syscall'lar için artar)
G sayısı = yüz binler olabilirBöylece milyonlarca goroutine birkaç OS iş parçacığına çoklanır (M:N zamanlama).
Goroutine neden ucuz?
Bir goroutine yaklaşık 2 KB yığınla başlar ve gerektikçe büyür; OS iş parçacığı ise genellikle 1–8 MB ayırır. Goroutine geçişi çekirdeğe inmeden kullanıcı alanında yapılır, bu yüzden bağlam değişimi çok hızlıdır.
Uygulama P ve CPU
runtime.GOMAXPROCS(0) ile runtime.NumCPU() değerlerini karşılaştır ve P sayısının CPU sayısından büyük olmadığını (<=) yazdır.
Başlangıç kodu
package main
import (
"fmt"
"runtime"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println(runtime.GOMAXPROCS(0) <= runtime.NumCPU())
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aynı anda en fazla kaç goroutine Go kodu çalıştırabilir?
- Her zaman 1
- GOMAXPROCS kadar (P sayısı) Doğru cevap
- Sınırsız
- M sayısı kadar
Açıklama: Go kodu çalıştırmak için P gerekir; P sayısı GOMAXPROCS'tur. Syscall'da bekleyen M'ler P tutmaz.
2 P sayısını oku
fmt.Println(runtime.____(0))
fmt.Println(runtime.GOMAXPROCS(0))
Açıklama: GOMAXPROCS(0) değeri değiştirmeden mevcut P sayısını döndürür.
3 G, M, P
| Kavram | Anlamı |
|---|---|
G |
Goroutine |
M |
OS iş parçacığı |
P |
Çalıştırma hakkı + kuyruk |
GOMAXPROCS |
P sayısı |