CodeBlanks Logo Icon CodeBlanks

Goroutine sayısı

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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

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

Soru
Bir goroutine başlangıçta yaklaşık ____ yığın alır.
Cevap
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ış

Orta seviye bölümündeki tüm dersler