Sobes.tech
Junior — Middle

Go dilinde eşzamanlılık ve senkronizasyon ile çalışma modeli nasıl uygulanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde eşzamanlılık, hafif iş parçacıkları olan goroutine'ler aracılığıyla gerçekleştirilir. Goroutine'ler go anahtar kelimesi kullanılarak başlatılır ve paralel çalışır, bu sırada Go çalışma zamanı kendi planlamasını yönetir.

Goroutine'ler arasında senkronizasyon ve veri alışverişi için birkaç mekanizma kullanılır:

  • Kanallar (channels) — goroutine'ler arasında güvenli veri iletimi sağlar ve senkronizasyonu garanti eder. Kanallar, doluysa göndereni, boşsa alıcıyı engelleyen kuyruklar olarak düşünülebilir.

  • sync paketi — mutex (sync.Mutex), koşul değişkenleri (sync.Cond), bekleme grupları (sync.WaitGroup) ve diğerleri gibi senkronizasyon primitive'lerini içerir.

Goroutine ve kanal kullanımı örneği:

package main
import (
    "fmt"
    "time"
)

func worker(id int, ch chan string) {
    time.Sleep(time.Second)
    ch <- fmt.Sprintf("İşçi %d tamamlandı", id)
}

func main() {
    ch := make(chan string)
    for i := 1; i <= 3; i++ {
        go worker(i, ch)
    }
    for i := 1; i <= 3; i++ {
        msg := <-ch
        fmt.Println(msg)
    }
}

Burada üç goroutine paralel olarak çalışır ve kanal, her birinden gelen sonuçları almak için kullanılır.