Goroutine sayısı
- Go kursu
- Orta seviye
- Ders 5/80
- 4 dk
Birden çok goroutine başlatmayı ve eşzamanlılık öğrenirsin.
Birden çok goroutine
Birden çok goroutine başlatmak Go'da kolaydır: bir döngüde go f(i) yazman yeter. Her biri bağımsız çalışır ve zamanlayıcı tarafından çekirdeklere dağıtılır.
Yüz binlerce goroutine aynı anda yaşayabilir; bellek maliyeti kilobayt düzeyindedir. Bu, goroutine'leri işletim sistemi iş parçacıklarından ayıran en önemli özelliktir.
Fakat goroutine'ler paylaşılan veriye erişiyorsa yarış durumu (data race) oluşur. sync.Mutex veya channel ile koruma gerekir. go test -race ile yarış tespit edilir.
Goroutine maliyeti
Bir goroutine başlangıçta ~2 KB yığın alır. Yığın dolunca Go otomatik olarak iki katına çıkarır (growing stack). Bu, derin özyinelemede bile bellek sorunu yaşamamayı sağlar.
Karşılaştırma: bir Linux iş parçacığı 8 MB yığın ayırır. 100 bin iş parçacığı 800 GB gerektirir; 100 bin goroutine ise ~200 MB ile çalışır.
Bu verimlilik, Go'yu eşzamanlı sunucu programlarında tercih edilen dil yapar.
Uygulama Çoklu goroutine başlat
main içine bir döngü içinde go work() çağrısı ve fmt.Println ile çoklu başladı yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func work() {
fmt.Println("çoklu başladı")
}
func main() {
for i := 0; i < 3; i++ {
go work()
}
fmt.Println("çoklu başladı")
}Beklenen çıktı
çoklu başladı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Yarış durumu nasıl tespit edilir?
- go run -v
- go vet
- go build -race
- go test -race Doğru cevap
Açıklama: go vet statik analiz yapar, yarış değil.
2 Goroutine yığın boyutu
Bir goroutine başlangıçta yaklaşık ____ yığın alır.
Bir goroutine başlangıçta yaklaşık 2 KB yığın alır.
Açıklama: 8 MB işletim sistemi iş parçacığı içindir.
3 Maliyet kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
goroutine |
2 KB |
OS thread |
8 MB |
growing stack |
Otomatik büyür |
data race |
Yarış |